Brutal Scripts
YouTubeDiscordStore
  • 🙉About Us
  • ↗️Translate
  • Informations
    • 🔒Escrow System
    • 🔥Common Problems
  • Scripts
    • 📄Notify
      • Accessible files
      • Installation guide
    • 🔠Text-UI
      • Installation guide
      • Exports & How to use
      • Integrations
    • 🤟Gangs
      • Accessible files
      • Installation guide
      • exports / triggers
      • Create a new gang
    • 🏡Housing
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🔑Keys
      • Accessible files
      • Installation guide
      • exports / triggers
    • 💥Gang Actions
      • Accessible files
      • Installation guide
      • exports / triggers
      • Controlling the menu
    • ⭕Radial
      • Accessible files
      • Installation guide
      • Adding new buttons
    • 🎯Executions
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🐶Pets + K9 V2
      • Accessible files
      • Installation guide
    • 👮Police Job
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🚑Ambulance Job
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🔧Mechanic Job
      • Accessible files
      • Installation guide
      • exports / triggers
    • 💪GYM with Skills V2
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🔫Paintball
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🥊Boxing
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🔨Crafting
      • Accessible files
      • Installation guide
      • Creating a new crafting table
    • 🏦Banking
      • Accessible files
      • Installation guide
      • Paycheck transactions
      • Registering transactions
    • 🎳Bowling
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🦌Hunting
      • Accessible files
      • Installation guide
    • 🏁Racing Script
      • Accessible files
      • Installation guide
    • 🐛Reports
      • Accessible files
      • Installation guide
    • 🛒Shop Robbery
      • Accessible files
      • Installation guide
    • 🛥️Yacht Heist
      • Accessible files
      • Installation guide
    • 🧾Billing
      • Accessible files
      • Installation guide
      • Triggers
    • 💰Truck Robbery
      • Accessible files
      • Installation guide
    • 🏧Atm Robbery
      • Accessible files
      • Installation guide
    • 👶Baby script
      • Installation guide
      • How to add more babys
  • Others
    • Register Key Mapping
    • Drill Minigame
    • Discord Webhook
Powered by GitBook
On this page

Was this helpful?

  1. Scripts
  2. Racing Script

Accessible files

Here you can find all the files which can be edite to make the asset compatible with your server.​

config.lua
Config = {
    Core = 'ESX',  -- STANDALONE / ESX / QBCORE | Other core setting on the 'core' folder and the client and server utils.lua
    Spectate = true,  -- Spectate menu | true / false
    StartAnimation = true, -- Vehicle Camera Animation before the race | true / false
    DisableControls = {75}, -- Disables controls when the Player in Race | More keys: https://docs.fivem.net/docs/game-references/controls/
    SpecDisableControls = {202}, -- Disables controls when the Player in Spectator Mode | More keys: https://docs.fivem.net/docs/game-references/controls/
    AfkKick = {Use = true, CheckTime = 5}, -- When player afk in the Race, get kick out of the race? | true / false
    PlateText = 'RACER', -- The Race Vehicle Plate | Example: 'RACER 12' | RACER + RACER ID

    Races = {
        ['Gokart Race'] = {
            MenuText = 'Press ~h~[E]~h~ to access to the ~r~Gokart Race', -- Menu Open Label
            OpenMenuMarker = {distance = 15, opendistance = 1.5, sprite = 1, rotation = false, upanddown = false, brightness = 100, sizes = {x = 1.5, y = 1.5, z = 1.2}}, -- Menu Marker
            
            MenuColor = {r = 255, g = 0, b = 0}, -- Menu Color (RGB) | Colors >> https://www.w3schools.com/colors/colors_rgb.asp
            Image = 'gokart.png', -- png name / none | put the png >> html/assets

            StartPlace = {x = -155.1325, y = -2138.7854, z = 16.7050}, -- The Race menu position
            Blip = {Use = true, sprite = 611, color = 1, size = 0.9}, -- Race blip
            
            Countdown = 3, -- Countdown before the Start
            MaximumLaps = 3, -- Maximum Laps amount
            Vehicles = {  -- Vehicles (The Party leader can chose vehicle of these)
                {Label = 'Veto', Model = 'veto'},
                {Label = 'Veto2', Model = 'veto2'},
                -- you can add more vehicles...
            },
            
            MinimumPlayerToStart = 1,  -- These amount how many people, you need to start the race
            StartPositions = {
                [1] = {x = -108.9535, y = -2111.8296, z = 16.7050, heading = 109.7840},
                [2] = {x = -107.4270, y = -2115.7952, z = 16.7050, heading = 112.0350},
                [3] = {x = -103.9880, y = -2114.7769, z = 16.7050, heading = 108.7055},
                -- You can add more
            },

            UseBlipRoute = false, -- true / false
            CheckPoints = {
                -- type is always 'CHECK' except for finish
                [1] = {type = 'CHECK', x = -137.5697, y = -2124.6213, z = 16.7050},
                [2] = {type = 'CHECK', x = -103.6637, y = -2125.5085, z = 16.7050},
                [3] = {type = 'CHECK', x = -22.0583, y = -2090.0203, z = 16.7050},
                [4] = {type = 'CHECK', x = -92.0535, y = -2023.2430, z = 18.0168},
                [5] = {type = 'CHECK', x = -74.7696, y = -1989.4807, z = 18.0168},
                [6] = {type = 'CHECK', x = -116.3052, y = -2019.2426, z = 18.0174},
                [7] = {type = 'FINISH', x = -118.7661, y = -2117.7083, z = 16.7050},
            },
            
            CheckPointsMarkers = {
                -- Chekpoint sprites: https://docs.fivem.net/docs/game-references/checkpoints/
                AcceptDistance = 5.0,
                CheckPoints = {sprite = 12, size = 2.5, height = 0.7, r = 236, g = 240, b = 41, r2 = 11, g2 = 79, b2 = 217},
                NewLap = {sprite = 15, size = 4.0, height = 1.3, r = 255, g = 167, b = 95, r2 = 11, g2 = 79, b2 = 217},
                Finish = {sprite = 16, size = 5.0, height = 1.7, r = 255, g = 0, b = 0, r2 = 255, g2 = 255, b2 = 255},
            },

            Blips = {
                Racer = {Use = true, label = 'Racer', sprite = 1, color = 0, size = 0.5},
                Checkpoint = {label = 'Checkpoint', sprite = 1, color = 46, size = 0.8},
                NewLap = {label = 'New Lap', sprite = 1, color = 44, size = 0.9},
                Finish = {label = 'Finish', sprite = 1, color = 1, size = 0.9},
            },
            
        }, 

        -- Separate --

        ['Motocross Race'] = {
            MenuText = 'Press ~h~[E]~h~ to access to the ~b~Motocross Race',
            OpenMenuMarker = {distance = 15, opendistance = 2.5, sprite = 1, rotation = false, upanddown = false, brightness = 100, sizes = {x = 1.5, y = 1.5, z = 1.2}},
            
            MenuColor = {r = 31, g = 76, b = 224},
            Image = 'motorcross.png',

            StartPlace = {x = 876.9960, y = 2353.6643, z = 51.1639},
            Blip = {Use = true, sprite = 379, color = 38, size = 0.9},
            
            Countdown = 3,
            MaximumLaps = 10,
            Vehicles = {
                {Label = 'Sanchez', Model = 'sanchez'},
                {Label = 'Sanchez 2', Model = 'sanchez2'},
                {Label = 'BF400', Model = 'bf400'},
            },
            
            MinimumPlayerToStart = 1,
            StartPositions = {
                [1] = {x = 891.4086, y = 2371.3882, z = 50.7886, heading = 186.1757}, 
                [2] = {x = 894.2198, y = 2371.9565, z = 51.0189, heading = 186.4175},
                [3] = {x = 890.9589, y = 2376.4568, z = 50.9534, heading = 186.5240},
                [4] = {x = 893.5837, y = 2376.1418, z = 50.8579, heading = 186.5240},
            },

            UseBlipRoute = false,
            CheckPoints = {
                [1] = {type = 'CHECK', x = 912.6369, y = 2266.5212, z = 44.6082},
                [2] = {type = 'CHECK', x = 1047.7155, y = 2193.2375, z = 44.4257},
                [3] = {type = 'CHECK', x = 1093.2423, y = 2160.5864, z = 52.8970},  
                [4] = {type = 'CHECK', x = 1164.6794, y = 2160.4233, z = 53.5996},
                [5] = {type = 'CHECK', x = 1104.5979, y = 2251.5044, z = 48.2457}, 
                [6] = {type = 'CHECK', x = 1000.3408, y = 2255.0613, z = 46.8931},
                [7] = {type = 'CHECK', x = 972.2839, y = 2393.9055, z = 51.0686},
                [8] = {type = 'CHECK', x = 1108.6628, y = 2410.5945, z = 50.1342},
                [9] = {type = 'CHECK', x = 1166.1816, y = 2263.1521, z = 49.7072},
                [10] = {type = 'CHECK', x = 1157.9310, y = 2472.8311, z = 53.4489},
                [11] = {type = 'CHECK', x = 982.0073, y = 2453.8176, z = 49.4780},  
                [12] = {type = 'CHECK', x = 912.4703, y = 2484.0940, z = 51.7866}, 
                [13] = {type = 'FINISH', x = 896.0545, y = 2345.9719, z = 51.8621},  
            },
            
            CheckPointsMarkers = {
                AcceptDistance = 7.0,
                CheckPoints = {sprite = 32, size = 7.0, height = -1.0, r = 236, g = 240, b = 41, r2 = 108, g2 = 183, b2 = 220},
                NewLap = {sprite = 3, size = 7.0, height = -1.0, r = 255, g = 167, b = 95, r2 = 11, g2 = 79, b2 = 217},
                Finish = {sprite = 4, size = 8.0, height = -1.0, r = 255, g = 0, b = 0, r2 = 255, g2 = 255, b2 = 255},
            },
            
            Blips = {
                Racer = {Use = true, label = 'Racer', sprite = 1, color = 0, size = 0.5},
                Checkpoint = {label = 'Checkpoint', sprite = 1, color = 46, size = 0.8},
                NewLap = {label = 'New Lap', sprite = 1, color = 44, size = 0.9},
                Finish = {label = 'Finish', sprite = 1, color = 1, size = 0.9},
            },
            
        },

        -- Separate --

        ['Street Race'] = {
            MenuText = 'Press ~h~[E]~h~ to access to the ~g~Street Race',
            OpenMenuMarker = {distance = 15, opendistance = 2.5, sprite = 1, rotation = false, upanddown = false, brightness = 100, sizes = {x = 1.5, y = 1.5, z = 1.2}},
            
            MenuColor = {r = 8, g = 158, b = 8},
            Image = 'street.png',

            StartPlace = {x = -961.9890, y = -189.7292, z = 37.6835},
            Blip = {Use = true, sprite = 315, color = 2, size = 0.9},
            
            Countdown = 3,
            MaximumLaps = 10,
            Vehicles = {
                {Label = 'Tyrant', Model = 'tyrant'},
                {Label = 'Zentorno', Model = 'zentorno'},
                {Label = 'T20', Model = 't20'},
                {Label = 'Tigon', Model = 'tigon'},
                {Label = 'Krieger', Model = 'krieger'},
            },
            
            MinimumPlayerToStart = 1,
            StartPositions = {
                [1] = {x = -962.0258, y = -240.8427, z = 38.0107, heading = 237.6622},
                [2] = {x = -961.9005, y = -233.7914, z = 37.8917, heading = 237.6622},
                [3] = {x = -971.9515, y = -235.2534, z = 37.9062, heading = 237.6622},
                [4] = {x = -971.0941, y = -228.3710, z = 37.8791, heading = 237.6622},
            },

            UseBlipRoute = true,
            CheckPoints = {
                [1] = {type = 'CHECK', x = -640.9636, y = -378.6581, z = 34.7035},
                [2] = {type = 'CHECK', x = -585.4349, y = -834.8732, z = 26.1865},
                [3] = {type = 'CHECK', x = -501.0806, y = -843.0291, z = 30.4747},
                [4] = {type = 'CHECK', x = -536.8833, y = -1041.8157, z = 22.7209},
                [5] = {type = 'CHECK', x = -268.9235, y = -1120.8202, z = 23.1038}, 
                [6] = {type = 'CHECK', x = -191.3755, y = -891.9453, z = 29.3437}, 
                [7] = {type = 'CHECK', x = -281.8544, y = -841.9296, z = 31.7544}, 
                [8] = {type = 'CHECK', x = -249.4979, y = -636.7039, z = 33.5503},
                [9] = {type = 'CHECK', x = -207.0967, y = -427.7849, z = 32.7965},
                [10] = {type = 'CHECK', x = -412.7425, y = -229.0907, z = 36.2574},
                [11] = {type = 'CHECK', x = -571.3403, y = -65.1246, z = 42.0321}, 
                [12] = {type = 'FINISH', x = -906.9836, y = -178.2199, z = 37.6483},
            },
            
            CheckPointsMarkers = {
                AcceptDistance = 7.0,
                CheckPoints = {sprite = 32, size = 7.0, height = -1.0, r = 236, g = 240, b = 41, r2 = 108, g2 = 183, b2 = 220},
                NewLap = {sprite = 3, size = 7.0, height = -1.0, r = 255, g = 167, b = 95, r2 = 11, g2 = 79, b2 = 217},
                Finish = {sprite = 4, size = 8.0, height = -1.0, r = 255, g = 0, b = 0, r2 = 255, g2 = 255, b2 = 255},
            },
            
            Blips = {
                Racer = {Use = true, label = 'Racer', sprite = 1, color = 0, size = 0.5},
                Checkpoint = {label = 'Checkpoint', sprite = 1, color = 46, size = 0.8},
                NewLap = {label = 'New Lap', sprite = 1, color = 44, size = 0.9},
                Finish = {label = 'Finish', sprite = 1, color = 1, size = 0.9},
            },
        },

        -- You can add more Races...
    },

    -----------------------------------------------------------
    ---------------------| ADMIN COMMANDS |--------------------
    -----------------------------------------------------------

    AdminGroups = {'superadmin', 'admin', 'mod'},  -- Only if the Core = ESX / QBCORE
    IdentifierPermission = false,
    Admins = {
        'discord:806082985861447691',
        'discord:692782027866636308',

        --[[ TYPES ]]--
        -- 'steam:123456789',
        -- 'license:123456789',
        -- 'fivem:123456789',
        -- 'ip:123456789',
        -- 'discord:123456789',
    },

    AdminCommands = {
        ShowRaces = {Use = true, Command = 'showraces'},  -- /showraces
        CloseParty = {Use = true, Command = 'closeparty'}, -- /closeparty [Race Name] | Use the /showraces to get the partys names
        KickPlayer = {Use = true, Command = 'kickplayer'}, -- /kickplayer [Player ID]
    },
    
    -----------------------------------------------------------
    -----------------------| TRANSLATE |-----------------------
    -----------------------------------------------------------

    MoneyForm = '$',
    Notify = {
        [1] =  {'Brutal Racing', "The Party already started!", 5000, 'error'},
        [2] =  {'Brutal Racing', "The Party is full!", 5000, 'error'},
        [3] =  {'Brutal Racing', "You are already in the Party!", 5000, 'error'},
        [4] =  {'Brutal Racing', "There is no minimum player!", 5000, 'error'},
        [5] =  {'Brutal Racing', "The Party is already created!", 5000, 'error'},
        [6] =  {'Brutal Racing', "You do not have enough money!", 5000, 'error'},
        [7] =  {'Brutal Racing', "You have successfully joined to the party!", 5000, 'success'},
        [8] =  {'Brutal Racing', "Your request must be accepted!", 5000, 'info'},
        [9] =  {'Brutal Racing', "Your request was accepted!", 5000, 'success'},
        [10] =  {'Brutal Racing', "Your request was rejected!", 5000, 'error'},
        [11] =  {'Brutal Racing', "You got kicked out of the Party!", 5000, 'error'},
        [12] =  {'Brutal Racing', "You are already in The Wait List!", 5000, 'error'},
        [13] =  {'Brutal Racing', "You can't open the menu in the vehicle!", 5000, 'error'},
        [14] =  {'Brutal Racing', "You can't leave the party!", 5000, 'error'},
        [15] =  {'Brutal Racing', "You have closed the stat panel!", 5000, 'info'},
        [16] =  {'Brutal Racing', "You have kicked from the Party! (AFK)", 5000, 'info'},
        [17] =  {'Brutal Racing', "You have gone to far away!<br>The party has been closed!", 5000, 'error'},
        [18] =  {'Brutal Racing', "Races Names:", 5000, 'info'},
        [19] =  {'Brutal Racing', "You don't have permission to use this command!", 5000, 'error'},
        [20] =  {'Brutal Racing', "Invalid Player ID!", 5000, 'error'},
        [21] =  {'Brutal Racing', "Invalid Party! [Use: /showraces]", 5000, 'error'},
        [22] =  {'Brutal Racing', "The party was successfully closed!", 5000, 'success'},
        [23] =  {'Brutal Racing', "You have received your prize:<b>", 5000, 'success'},
        [24] =  {'Brutal Racing', "The player is not in a party!", 5000, 'error'},
        [25] =  {'Brutal Racing', "You got kicked out of the Party by an Admin!", 5000, 'error'},
        [26] =  {'Brutal Racing', "The player has been kicked out!", 5000, 'success'},
    }
}
client-utils.lua
-- Buy here: (4€+VAT) https://store.brutalscripts.com
function notification(title, text, time, type)
    exports['brutal_notify']:SendAlert(title, text, time, type)
end

function PlayerDied()
    if Config.Core:upper() == 'ESX' or Config.Core:upper() == 'STANDALONE' then
        PlayerDiedHealth = 0
    elseif Config.Core:upper() == 'QBCORE' then
        PlayerDiedHealth = 150
    end

    local died = false
    if (GetEntityHealth(PlayerPedId()) <= PlayerDiedHealth) then
        died = true
    end
    return died
end

function GetPlayerNameFunction()
    return GetPlayerName(PlayerId())
end

function FinishNotify(Rank, Time)
    MidsizeBanner("~r~PLACED ON~w~ #"..Rank..".", "~b~You successfully finised the Race!\n~w~Time: ~g~"..Time.."", 2, 5, true)
end

function RankNotify(PlayerName, PlayerRank)
    RankShow("~r~".. PlayerName .." ~b~has finished the Race!", "PLACED ON #"..PlayerRank, 0.93, 0.15, 8, false)
end

function LeftGameNotify(PlayerName)
    RankShow("~r~".. PlayerName .." ~b~has left the Race!", "", 0.93, 0.15, 8, false)
end

function NewLapNotify(CurrentRounds, Rounds)
    showScaleform("LAP " .. CurrentRounds .."/"..Rounds, "", 2)
end

function ShowHelpText(x,y,z, text)
	AddTextEntry('HelpText', text)
	SetFloatingHelpTextWorldPosition(1, x,y,z)
	SetFloatingHelpTextStyle(1, 1, 2, -1, 3, 0)
	BeginTextCommandDisplayHelp('HelpText')
	EndTextCommandDisplayHelp(2, false, false, -1)
end

-----------------------| UTILS TRIGGERS |-----------------------

RegisterNetEvent('brutal_vehicleshop:client:utils:CreateVehicle')
AddEventHandler('brutal_vehicleshop:client:utils:CreateVehicle', function(Vehicle)
    SetVehicleFuelLevel(Vehicle, 100.0)
    DecorSetFloat(Vehicle, "_FUEL_LEVEL", GetVehicleFuelLevel(Vehicle))
end)

RegisterNetEvent('brutal_vehicleshop:client:utils:DeleteVehicle')
AddEventHandler('brutal_vehicleshop:client:utils:DeleteVehicle', function(Vehicle)

end)
server-utils.lua
-- Buy here: (4€+VAT) https://store.brutalscripts.com
function notification(source, title, text, time, type)
    TriggerClientEvent('brutal_notify:SendAlert', source, title, text, time, type)
end

if Config.Core:upper() == 'ESX' then
    ESX = exports['es_extended']:getSharedObject()
elseif Config.Core:upper() == 'QBCORE' then
    QBCore = exports['qb-core']:GetCoreObject()
end

function GetPlayerNameFunction(source)
    local name = ''
    if Config.SteamName then
        name = GetPlayerName(source)
    else
        local xPlayer = ESX.GetPlayerFromId(source)
        if Config.Core:upper() == 'ESX' then
            name = xPlayer.getName() or 'No Data'
        else
            name = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname
        end
    end

    return name
end

function RemoveMoneyFunction(source, amount)
    removed = false

    -- ESX
    if Config.Core:upper() == 'ESX' then
        xPlayer = ESX.GetPlayerFromId(source)

        if xPlayer.getAccount('money').money >= amount then
            xPlayer.removeAccountMoney('money', amount)
            removed = true
        end

    -- QBCore
    elseif Config.Core:upper() == 'QBCORE' then
        xPlayer = QBCore.Functions.GetPlayer(source)

        if xPlayer.PlayerData.money['cash'] >= amount then
            xPlayer.Functions.RemoveMoney('cash', amount)
            removed = true
        end
    end

    return removed
end

function AddMoneyFunction(source, amount)

    -- ESX
    if Config.Core:upper() == 'ESX' then
        xPlayer = ESX.GetPlayerFromId(source)
        xPlayer.addAccountMoney('money', amount)
    -- QBCore
    elseif Config.Core:upper() == 'QBCORE' then
        xPlayer = QBCore.Functions.GetPlayer(source)
        xPlayer.Functions.AddMoney('cash', amount)
    end
end

function StaffCheck(source)
    local staff = false

    if Config.Core:upper() == 'ESX' and Config.IdentifierPermission ~= true then
        local player = ESX.GetPlayerFromId(source)
        local playerGroup = player.getGroup()

        for i, Group in ipairs(Config.AdminGroups) do
            if playerGroup == Group then
                staff = true
                break
            end
        end
    elseif Config.Core:upper() == 'QBCORE' and Config.IdentifierPermission ~= true then
            local player = QBCore.Functions.GetPlayer(source)
            local playerGroup = player.Functions.GetPermission()
    
            for i, Group in ipairs(Config.AdminGroups) do
                if playerGroup == Group then
                    staff = true
                    break
                end
            end
    elseif Config.IdentifierPermission or Config.Core:upper() == 'STANDALONE' then
        for i, a in ipairs(Config.Admins) do
            for x, b in ipairs(GetPlayerIdentifiers(source)) do
                if string.lower(b) == string.lower(a) then
                    staff = true
                    break
                end
            end
        end
    end

    return staff
end
PreviousRacing ScriptNextInstallation guide

Last updated 1 year ago

Was this helpful?

🏁