141 lines
5.0 KiB
Lua
141 lines
5.0 KiB
Lua
|
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
|