local QBCore = exports['qb-core']:GetCoreObject() local Races = {} local InRace = false local RaceId = 0 local ShowCountDown = false local RaceCount = 5 function DrawText3Ds(x, y, z, text) SetTextScale(0.35, 0.35) SetTextFont(4) SetTextProportional(1) SetTextColour(255, 255, 255, 215) SetTextEntry("STRING") SetTextCentre(true) AddTextComponentString(text) SetDrawOrigin(x,y,z, 0) DrawText(0.0, 0.0) local factor = (string.len(text)) / 370 DrawRect(0.0, 0.0+0.0125, 0.017+ factor, 0.03, 0, 0, 0, 75) ClearDrawOrigin() end CreateThread(function() while true do Wait(7) if Races ~= nil then -- No race yet local pos = GetEntityCoords(PlayerPedId(), true) if RaceId == 0 then for k in pairs(Races) do if Races[k] ~= nil then if #(pos - vector3(Races[k].startx, Races[k].starty, Races[k].startz)) < 15.0 and not Races[k].started then DrawText3Ds(Races[k].startx, Races[k].starty, Races[k].startz, "[~g~H~w~] For at være med i løbet (~g~$"..Races[k].amount..",-~w~)") if IsControlJustReleased(0, 74) then TriggerServerEvent("qb-streetraces:JoinRace", k) end end end end end -- Not started in race yet if RaceId ~= 0 and not InRace then if #(pos - vector3(Races[RaceId].startx, Races[RaceId].starty, Races[RaceId].startz)) < 15.0 and not Races[RaceId].started then DrawText3Ds(Races[RaceId].startx, Races[RaceId].starty, Races[RaceId].startz, "Løbet vil snart starte") end end -- In race and started if RaceId ~= 0 and InRace then if #(pos - vector3(Races[RaceId].endx, Races[RaceId].endy, pos.z)) < 250.0 and Races[RaceId].started then DrawText3Ds(Races[RaceId].endx, Races[RaceId].endy, pos.z + 0.98, "FINISH") if #(pos - vector3(Races[RaceId].endx, Races[RaceId].endy, pos.z)) < 15.0 then TriggerServerEvent("qb-streetraces:RaceWon", RaceId) InRace = false end end end if ShowCountDown then if #(pos - vector3(Races[RaceId].startx, Races[RaceId].starty, Races[RaceId].startz)) < 15.0 and Races[RaceId].started then DrawText3Ds(Races[RaceId].startx, Races[RaceId].starty, Races[RaceId].startz, "Løbet starter om ~g~"..RaceCount) end end end end end) RegisterNetEvent('qb-streetraces:StartRace', function(race) if RaceId ~= 0 and RaceId == race then SetNewWaypoint(Races[RaceId].endx, Races[RaceId].endy) InRace = true RaceCountDown() end end) RegisterNetEvent('qb-streetraces:RaceDone', function(race, winner) if RaceId ~= 0 and RaceId == race then RaceId = 0 InRace = false QBCore.Functions.Notify("Løbet er ovre! Vinderen er "..winner.. "!") end end) RegisterNetEvent('qb-streetraces:StopRace', function() RaceId = 0 InRace = false end) RegisterNetEvent('qb-streetraces:CreateRace', function(amount) local pos = GetEntityCoords(PlayerPedId(), true) local WaypointHandle = GetFirstBlipInfoId(8) if DoesBlipExist(WaypointHandle) then local c = GetBlipInfoIdCoord(WaypointHandle) if #(pos - c) > 500.0 then local race = { creator = nil, started = false, startx = pos.x, starty = pos.y, startz = pos.z, endx = c.x, endy = c.y, endz = c.z, amount = amount, pot = amount, joined = {} } TriggerServerEvent("qb-streetraces:NewRace", race) QBCore.Functions.Notify("Løb oprettet for "..amount.."DKK", "success") else QBCore.Functions.Notify("Slutposition er for tæt", "error") end else QBCore.Functions.Notify("Du er nødt til at markere på kortet", "error") end end) RegisterNetEvent('qb-streetraces:SetRace', function(RaceTable) Races = RaceTable end) RegisterNetEvent('qb-streetraces:SetRaceId', function(race) RaceId = race SetNewWaypoint(Races[RaceId].endx, Races[RaceId].endy) end) function RaceCountDown() ShowCountDown = true while RaceCount ~= 0 do FreezeEntityPosition(GetVehiclePedIsIn(PlayerPedId(), true), true) PlaySound(-1, "slow", "SHORT_PLAYER_SWITCH_SOUND_SET", 0, 0, 1) QBCore.Functions.Notify(RaceCount, 'primary', 800) Wait(1000) RaceCount = RaceCount - 1 end ShowCountDown = false RaceCount = 5 FreezeEntityPosition(GetVehiclePedIsIn(PlayerPedId(), true), false) QBCore.Functions.Notify("GOOOOOOOOO!!!") end