[QB / QBOX / ESX] Advanced Racing System | Ranked • ELO • Crews • Custom Tracks | ak4y-racing
Description
AK4Y Advanced Racing System delivers a complete and competitive racing experience for FiveM.
With ranked gameplay, ELO progression, custom track creation and crew systems, this script turns racing into a long-term competitive activity.
Everything is designed to provide a real racing feel, high replayability and strong player engagement.
Features
Ranked & ELO System
- Gain ELO by participating in ranked races
- Progress through ranks
- Some races require specific ELO levels
Player Profile
- Customize username and profile image
- Used in leaderboard systems
Advanced Track Creation
- Create custom race routes via tablet
- Save and reuse routes
- Place race props (visible only to racers)
- Choose:
- Prop-based checkpoints
- Invisible checkpoints
- Easy placement system
Race Setup System
- Start races from saved routes
- Configure:
- ELO restrictions
- Ranked / Unranked mode
- Entry fee & reward pool
- Lap count
- Vehicle class restrictions
- Ghost mode settings
- DNF timer
- Optional host-funded prize pool
Racing Experience
- Advanced racing HUD:
- Track progress visualization
- Accurate race position tracking
- Checkpoint miss warning system
- Wrong direction detection HUD
Crew System
- Create and manage crews
- Track member performance
- Crew leaderboard system
- Join & invite system
Config & Customization
- Fully configurable (no coding required)
- Restrict tablet access by job
- Tablet can be opened via item or command
- 20+ language support
- Discord log integration (webhook)
Performance
- 0.0 resmon when idle
- Low resmon during races
- Fully optimized and responsive
You can buy this script from ak4y.tebex.io
- Open Source | 50€
- Escrow | 10€
Preview Video
Config
Config = {}
-- Locale/translation table (loaded from locales/*.lua files)
Config.locales = {}
-- Language code to use (en, tr, de, fr, es, pl, ru, etc.)
Config.Locale = "en"
-- Open menu with command (true = /racing command works)
Config.OpenWithCommand = true
-- Command name that opens the menu
Config.CommandName = "racing"
-- Open menu with item (true = tablet item can be used)
Config.UseWithItem = true
-- Tablet item name
Config.ItemName = "racingtablet"
-- Menu open event: ak4y-racing:client:openMenu
-- These jobs cannot open the racing menu (e.g. police)
Config.BlockedJobs = {
["police"] = true,
["bcso"] = true
}
-- Route/track creator settings
Config.RouteCreator = {
MinCheckpoints = 10, -- Minimum checkpoint count (route cannot be saved below this)
MinTireDistance = 2.0, -- Minimum distance between checkpoint tires (meters)
MaxTireDistance = 30.0, -- Maximum distance between checkpoint tires (meters)
HeadingStep = 5.0, -- Checkpoint heading rotation step (degrees)
CheckpointPileModel = 'prop_offroad_tyres02', -- Default checkpoint prop model
Buttons = {
AddCheckpoint = 'INSERT', -- Key to add new checkpoint
DeleteCheckpoint = 'DELETE', -- Key to delete last checkpoint
SaveRoute = '0', -- Key to save route
Exit = '9', -- Key to exit route creator
IncreaseDistance = 'PAGEUP', -- Key to increase checkpoint distance
DecreaseDistance = 'PAGEDOWN', -- Key to decrease checkpoint distance
RotateHeadingLeft = 'LEFT', -- Key to rotate checkpoint heading left
RotateHeadingRight = 'RIGHT', -- Key to rotate checkpoint heading right
AddRaceObject = 'RETURN', -- Key to add start/finish object (Enter)
},
}
-- Racing system settings
Config.Racing = {
DNFCountdownSeconds = 60, -- DNF countdown for players who don't finish (seconds) (For the default, you can change on race setup page.)
VehicleDistanceLimit = 50, -- Max distance from vehicle (meters), disqualify if exceeded
ShowWrongDirectionWarning = true, -- Show wrong direction warning (when going backwards)
ShowCheckpointMissedWarning = true, -- Show checkpoint missed warning
CheckpointCylinderRadius = 5.0, -- Checkpoint detection cylinder radius (meters)
CheckpointCylinderHeight = 0.0, -- Checkpoint detection cylinder height
MinPlayersForRanked = 3, -- Minimum players for ranked race
Elo = {
DefaultElo = 1000, -- Starting ELO for new players
KFactor = 32, -- ELO K factor (experienced players)
KFactorProvisional = 40, -- ELO K factor (new players, faster rating change)
},
PrizePercentages = {
First = 50, -- 1st place prize percentage
Second = 30, -- 2nd place prize percentage
Third = 20, -- 3rd place prize percentage
},
}
-- GPS/navigation settings
Config.IgnoreRoadsForGps = false -- true = GPS uses roads only (false = allows shortcuts)
Config.ShowGpsRoute = true -- Show GPS route on map during race
Config.ShowUiWaypoints = true -- Show waypoint markers on screen
Config.UseUglyWaypoint = false -- Use old/ugly waypoint style
Config.ShowNewWaypoints = true -- Use new waypoint style
Config.MarkAmountOfCheckpointsAhead = 5 -- How many checkpoints ahead to show (minimap/UI)
Config.Gps = { color = 12 } -- GPS route color (GTA color ID)
-- Prop/object options for start, checkpoint and finish points
Config.RouteObjects = {
["start"] = { -- Start line objects
{ propName = "drawmarker" },
{ img = "img/icons/prop_beachflag_le.png", propName = "prop_beachflag_le" },
{ img = "img/icons/prop_golfflag.png", propName = "prop_golfflag" },
{ img = "img/icons/prop_beachflag_01.png", propName = "prop_beachflag_01" },
{ img = "img/icons/prop_beachflag_02.png", propName = "prop_beachflag_02" },
{ img = "img/icons/prop_tyre_wall_01.png", propName = "prop_tyre_wall_01" },
{ img = "img/icons/stt_prop_tyre_wall_01.png", propName = "stt_prop_tyre_wall_01" },
},
["checkpoint"] = { -- Checkpoint objects (flags, cones, tires, etc.)
{ propName = "drawmarker" },
{ img = "img/icons/prop_offroad_tyres02.png", propName = "prop_offroad_tyres02" },
{ img = "img/icons/stt_prop_tyre_wall_01.png", propName = "stt_prop_tyre_wall_01" },
{ img = "img/icons/prop_offroad_tyres01_tu.png", propName = "prop_offroad_tyres01_tu" },
{ img = "img/icons/prop_offroad_tyres01.png", propName = "prop_offroad_tyres01" },
{ img = "img/icons/prop_mp_cone_01.png", propName = "prop_mp_cone_01" },
{ img = "img/icons/prop_roadcone01a.png", propName = "prop_roadcone01a" },
{ img = "img/icons/prop_roadcone01b.png", propName = "prop_roadcone01b" },
{ img = "img/icons/prop_air_conelight.png", propName = "prop_air_conelight" },
{ img = "img/icons/prop_mp_cone_04.png", propName = "prop_mp_cone_04" },
},
["finish"] = { -- Finish line objects
{ propName = "drawmarker" },
{ img = "img/icons/prop_beachflag_le.png", propName = "prop_beachflag_le" },
{ img = "img/icons/prop_golfflag.png", propName = "prop_golfflag" },
{ img = "img/icons/prop_beachflag_01.png", propName = "prop_beachflag_01" },
{ img = "img/icons/prop_beachflag_02.png", propName = "prop_beachflag_02" },
{ img = "img/icons/prop_tyre_wall_01.png", propName = "prop_tyre_wall_01" },
{ img = "img/icons/stt_prop_tyre_wall_01.png", propName = "stt_prop_tyre_wall_01" },
},
}
-- Returns translation text for key; returns key itself if not found
function getLocale(key)
return Config.locales[Config.Locale][key] or key
end
| Code is accessible | Yes / No |
| Subscription-based | No |
| Requirements | QB / QBOX / ESX and ak4y-core (free with script) |
| Multiplayer Support | Yes |
| Support | Yes |
























