295 lines
9.6 KiB
Scheme
Executable File
295 lines
9.6 KiB
Scheme
Executable File
#IF IS_DEBUG_BUILD
|
|
|
|
// Includes
|
|
USING "commands_hud.sch"
|
|
USING "commands_misc.sch"
|
|
USING "shared_debug.sch"
|
|
USING "common_Races.sch"
|
|
USING "finance_control_public.sch"
|
|
USING "fmmc_cloud_loader.sch"
|
|
|
|
/// DEBUG WIDGET VARIABLES
|
|
WIDGET_GROUP_ID widgetGroup
|
|
// Commented out for now this needs to be replaced with the new UGC system
|
|
//STRUCT_DATA_FILE cloudData
|
|
BOOL bSetAtNight
|
|
BOOL bGiveCash
|
|
BOOL bGiveVeh
|
|
BOOL bOutputData
|
|
GET_UGC_CONTENT_STRUCT ugcContentStruct
|
|
|
|
/// PURPOSE: Required to shift checkpoints from original cloud data
|
|
PROC ADJUST_CHECKPOINTS_FOR_RACE()
|
|
|
|
INT i
|
|
INT iReverse
|
|
|
|
FOR i = 0 TO (g_FMMC_STRUCT.iNumberOfCheckPoints)
|
|
iReverse = (g_FMMC_STRUCT.iNumberOfCheckPoints - i)
|
|
IF iReverse > 0
|
|
AND iReverse < GET_FMMC_MAX_NUM_CHECKPOINTS()
|
|
g_FMMC_STRUCT.sPlacedCheckpoint[iReverse].vCheckPoint = g_FMMC_STRUCT.sPlacedCheckpoint[iReverse -1].vCheckPoint
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
IF g_FMMC_STRUCT.iRaceType != FMMC_RACE_TYPE_P2P
|
|
AND g_FMMC_STRUCT.iRaceType != FMMC_RACE_TYPE_BOAT_P2P
|
|
AND g_FMMC_STRUCT.iRaceType != FMMC_RACE_TYPE_AIR_P2P
|
|
g_FMMC_STRUCT.vStartingGrid = g_FMMC_STRUCT.sPlacedCheckpoint[0].vCheckPoint
|
|
g_FMMC_STRUCT.sPlacedCheckpoint[0].vCheckPoint = g_FMMC_STRUCT.sPlacedCheckpoint[(g_FMMC_STRUCT.iNumberOfCheckPoints)].vCheckPoint
|
|
ELSE
|
|
g_FMMC_STRUCT.sPlacedCheckpoint[0].vCheckPoint = g_FMMC_STRUCT.vStartingGrid
|
|
ENDIF
|
|
g_FMMC_STRUCT.sPlacedCheckpoint[(g_FMMC_STRUCT.iNumberOfCheckPoints)].vCheckPoint = <<0.0, 0.0, 0.0>>
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Setup Race Widget
|
|
PROC SETUP_RACE_WIDGET(RACE_DATA raceData)
|
|
|
|
// Create widget
|
|
IF raceData.eRaceType = RACETYPE_SEA
|
|
widgetGroup = START_WIDGET_GROUP("Sea Races")
|
|
ELSE
|
|
widgetGroup = START_WIDGET_GROUP("Street Races")
|
|
ENDIF
|
|
|
|
// Track name
|
|
SWITCH raceData.eRaceTrack
|
|
|
|
// Street Races
|
|
CASE STREET_RACE_01 ADD_WIDGET_STRING("Race Track: SOUTH LOS SANTOS") BREAK
|
|
CASE STREET_RACE_02 ADD_WIDGET_STRING("Race Track: CITY CIRCUIT") BREAK
|
|
CASE STREET_RACE_04 ADD_WIDGET_STRING("Race Track: AIRPORT") BREAK
|
|
CASE STREET_RACE_05 ADD_WIDGET_STRING("Race Track: FREEWAY") BREAK
|
|
CASE STREET_RACE_06 ADD_WIDGET_STRING("Race Track: VESPUCCI CANALS") BREAK
|
|
|
|
// Sea Races
|
|
CASE SEA_RACE_01 ADD_WIDGET_STRING("Race Track: NORTH COAST") BREAK
|
|
CASE SEA_RACE_02 ADD_WIDGET_STRING("Race Track: SOUTH COAST") BREAK
|
|
CASE SEA_RACE_03 ADD_WIDGET_STRING("Race Track: RATON CANYON") BREAK
|
|
CASE SEA_RACE_04 ADD_WIDGET_STRING("Race Track: LOS SANTOS") BREAK
|
|
ENDSWITCH
|
|
|
|
// Vehicle type
|
|
SWITCH raceData.eRaceType
|
|
CASE RACETYPE_BIKE ADD_WIDGET_STRING("Race Type: BIKES") BREAK
|
|
CASE RACETYPE_CAR ADD_WIDGET_STRING("Race Type: CARS") BREAK
|
|
CASE RACETYPE_SEA ADD_WIDGET_STRING("Race Type: SEA") BREAK
|
|
ENDSWITCH
|
|
|
|
// Entry fee
|
|
SWITCH raceData.iRaceFee
|
|
CASE 1000 ADD_WIDGET_STRING("Entry Fee: $1000") BREAK
|
|
CASE 5000 ADD_WIDGET_STRING("Entry Fee: $5000") BREAK
|
|
DEFAULT ADD_WIDGET_STRING("Entry Fee: FREE") BREAK
|
|
ENDSWITCH
|
|
|
|
ADD_WIDGET_BOOL("Give Entry Fee", bGiveCash)
|
|
ADD_WIDGET_BOOL("Set At Night", bSetAtNight)
|
|
ADD_WIDGET_BOOL("Warp Into Race Vehicle", bGiveVeh)
|
|
ADD_WIDGET_BOOL("Output Race Data", bOutputData)
|
|
STOP_WIDGET_GROUP()
|
|
ENDPROC
|
|
|
|
|
|
PROC OUTPUT_MP_GLOBALS_TO_TTY()
|
|
CPRINTLN(DEBUG_MISSION, "-----------------------------------------")
|
|
CPRINTLN(DEBUG_MISSION, "Race Launcher: Outputting MP global data:")
|
|
CPRINTLN(DEBUG_MISSION, "g_FMSP_Race_Data.bActive = ", g_FMSP_Race_Data.bActive)
|
|
CPRINTLN(DEBUG_MISSION, "g_FMSP_Race_Data.sUserID = ", g_FMSP_Race_Data.sUserID)
|
|
CPRINTLN(DEBUG_MISSION, "g_FMSP_Race_Data.sFilename = ", g_FMSP_Race_Data.sFilename)
|
|
CPRINTLN(DEBUG_MISSION, "g_FMSP_Race_Data.vLocation = ", g_FMSP_Race_Data.vLocation)
|
|
CPRINTLN(DEBUG_MISSION, "-----------------------------------------")
|
|
ENDPROC
|
|
|
|
PROC OUTPUT_RACE_DATA_TO_TTY()
|
|
|
|
INT i
|
|
|
|
CPRINTLN(DEBUG_MISSION, "-------------------------------------------------------")
|
|
CPRINTLN(DEBUG_MISSION, "-- RACE DATA --")
|
|
CPRINTLN(DEBUG_MISSION, "-------------------------------------------------------")
|
|
CPRINTLN(DEBUG_MISSION, "------------STARTING GRID-------------")
|
|
CPRINTLN(DEBUG_MISSION, "trackData.iNumAIRacers = ", g_FMMC_STRUCT_ENTITIES.iNumberOfVehicles-1)
|
|
FOR i = 0 TO g_FMMC_STRUCT_ENTITIES.iNumberOfVehicles - 1
|
|
IF i < FMMC_MAX_NUM_RACERS
|
|
CPRINTLN(DEBUG_MISSION, "trackData.vStartGrid[",i,"] = ", g_FMMC_STRUCT_ENTITIES.sPlacedVehicle[i].vPos)
|
|
CPRINTLN(DEBUG_MISSION, "trackData.fStartGrid[",i,"] = ", g_FMMC_STRUCT_ENTITIES.sPlacedVehicle[i].fHead)
|
|
WAIT(0)
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
CPRINTLN(DEBUG_MISSION, "-------------CHECKPOINTS--------------")
|
|
CPRINTLN(DEBUG_MISSION, "trackData.iNumCheckpoints = ", g_FMMC_STRUCT.iNumberOfCheckPoints)
|
|
FOR i = 0 TO g_FMMC_STRUCT.iNumberOfCheckPoints - 1
|
|
IF i < GET_FMMC_MAX_NUM_CHECKPOINTS()
|
|
CPRINTLN(DEBUG_MISSION, "trackData.vCheckPoint[",i,"] = ",g_FMMC_STRUCT.sPlacedCheckpoint[i].vCheckPoint)
|
|
WAIT(0)
|
|
ENDIF
|
|
ENDFOR
|
|
CPRINTLN(DEBUG_MISSION, "--------------------------------------")
|
|
ENDPROC
|
|
|
|
PROC OUTPUT_RACE_DATA_TO_DEBUG_FILE()
|
|
|
|
TEXT_LABEL_63 tTemp
|
|
INT i
|
|
|
|
OPEN_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("------------STARTING GRID-------------")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("trackData.iNumAIRacers = ")
|
|
SAVE_INT_TO_DEBUG_FILE(g_FMMC_STRUCT_ENTITIES.iNumberOfVehicles-1)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
FOR i = 0 TO g_FMMC_STRUCT_ENTITIES.iNumberOfVehicles - 1
|
|
IF i < FMMC_MAX_NUM_RACERS
|
|
|
|
// Start Grid Vector
|
|
tTemp = "trackData.vStartGrid["
|
|
tTemp += i
|
|
tTemp += "] = "
|
|
SAVE_STRING_TO_DEBUG_FILE(tTemp)
|
|
SAVE_VECTOR_TO_DEBUG_FILE(g_FMMC_STRUCT_ENTITIES.sPlacedVehicle[i].vPos)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
// Start Grid Heading
|
|
tTemp = "trackData.fStartGrid["
|
|
tTemp += i
|
|
tTemp += "] = "
|
|
SAVE_STRING_TO_DEBUG_FILE(tTemp)
|
|
SAVE_FLOAT_TO_DEBUG_FILE(g_FMMC_STRUCT_ENTITIES.sPlacedVehicle[i].fHead)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
WAIT(0)
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
SAVE_STRING_TO_DEBUG_FILE("-------------CHECKPOINTS--------------")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("trackData.iNumCheckpoints = ")
|
|
SAVE_INT_TO_DEBUG_FILE(g_FMMC_STRUCT.iNumberOfCheckPoints)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
FOR i = 0 TO g_FMMC_STRUCT.iNumberOfCheckPoints - 1
|
|
IF i < GET_FMMC_MAX_NUM_CHECKPOINTS()
|
|
|
|
// Checkpoint
|
|
tTemp = "trackData.vCheckPoint["
|
|
tTemp += i
|
|
tTemp += "] = "
|
|
SAVE_STRING_TO_DEBUG_FILE(tTemp)
|
|
SAVE_VECTOR_TO_DEBUG_FILE(g_FMMC_STRUCT.sPlacedCheckpoint[i].vCheckPoint)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
WAIT(0)
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
CLOSE_DEBUG_FILE()
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Check for user input
|
|
PROC MAINTAIN_RACE_WIDGET(RACE_DATA raceData)
|
|
|
|
// Force time of day to night
|
|
IF bSetAtNight
|
|
SET_CLOCK_TIME(0,0,0)
|
|
bSetAtNight = FALSE
|
|
ENDIF
|
|
|
|
// Give entry fee for this race
|
|
IF bGiveCash
|
|
CREDIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_UNLOGGED_SMALL_ACTION, raceData.iRaceFee)
|
|
bGiveCash = FALSE
|
|
ENDIF
|
|
|
|
// Give suitable race vehicle
|
|
IF bGiveVeh
|
|
|
|
// Request either car or bike model
|
|
MODEL_NAMES vehModel
|
|
SWITCH raceData.eRaceType
|
|
CASE RACETYPE_BIKE vehModel = BATI BREAK
|
|
CASE RACETYPE_CAR vehModel = BUFFALO BREAK
|
|
CASE RACETYPE_SEA vehModel = SEASHARK BREAK
|
|
ENDSWITCH
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
|
|
// Take out of existing vehicle
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
|
|
VEHICLE_INDEX oldCar = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
|
|
|
|
IF DOES_ENTITY_EXIST(oldCar)
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(oldCar)
|
|
SET_ENTITY_AS_MISSION_ENTITY(oldCar)
|
|
ENDIF
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
DELETE_VEHICLE(oldCar)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Request new car
|
|
REQUEST_MODEL(vehModel)
|
|
WHILE NOT HAS_MODEL_LOADED(vehModel)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
// Place player into new vehicle
|
|
VEHICLE_INDEX newCar = CREATE_VEHICLE(vehModel, GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_HEADING(PLAYER_PED_ID()))
|
|
IF DOES_ENTITY_EXIST(newCar)
|
|
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), newCar)
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(newCar)
|
|
ENDIF
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(vehModel)
|
|
ENDIF
|
|
|
|
bGiveVeh = FALSE
|
|
ENDIF
|
|
|
|
// Output race information to debug channels
|
|
IF bOutputData
|
|
IF IS_PLAYER_ONLINE()
|
|
IF NOT IS_PC_VERSION()
|
|
// Commented out for now this needs to be replaced with the new UGC system
|
|
/*WHILE NOT LOAD_DATA_OLD(cloudData, PLAYER_ID(), raceData.iSaveSlot, GET_CLOUD_ID())
|
|
CPRINTLN(DEBUG_MISSION, "Race Launcher: Getting cloud data...")
|
|
WAIT(0)
|
|
ENDWHILE*/
|
|
|
|
WHILE NOT GET_UGC_BY_CONTENT_ID(ugcContentStruct, GET_RACE_FILENAME(raceData.eRaceTrack))
|
|
CPRINTLN(DEBUG_MISSION, "Race Launcher: Getting cloud data...")
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
// Adjust for P2P races
|
|
IF raceData.bP2P
|
|
CPRINTLN(DEBUG_MISSION, "Race Launcher: Adjusting checkpoints for race...")
|
|
ADJUST_CHECKPOINTS_FOR_RACE()
|
|
ENDIF
|
|
|
|
// Output race data
|
|
OUTPUT_RACE_DATA_TO_TTY()
|
|
OUTPUT_RACE_DATA_TO_DEBUG_FILE()
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION, "Race Launcher: Unable to obtain data for PC version.")
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION, "Race Launcher: Unable to obtain data when offline.")
|
|
ENDIF
|
|
|
|
bOutputData = FALSE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Destroy widget
|
|
PROC CLEANUP_RACE_WIDGET()
|
|
IF DOES_WIDGET_GROUP_EXIST(widgetGroup)
|
|
DELETE_WIDGET_GROUP(widgetGroup)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
#ENDIF
|