279 lines
9.6 KiB
Lua
279 lines
9.6 KiB
Lua
|
local QBCore = exports['qb-core']:GetCoreObject()
|
||
|
local Time = 0
|
||
|
local TicketAtivo = false
|
||
|
local Veiculo = nil
|
||
|
local KartingPoly = PolyZone:Create({
|
||
|
vector2(-169.23545837402, -2126.0227050781),
|
||
|
vector2(-103.59944915771, -2103.1733398438),
|
||
|
vector2(-101.42811584473, -2102.9812011719),
|
||
|
vector2(-102.84362030029, -2099.4099121094),
|
||
|
vector2(-118.13861083984, -2055.4501953125),
|
||
|
vector2(-120.92548370361, -2048.2705078125),
|
||
|
vector2(-122.6300201416, -2040.9029541016),
|
||
|
vector2(-122.81782531738, -2031.3441162109),
|
||
|
vector2(-116.01826477051, -1980.0040283203),
|
||
|
vector2(-114.74008178711, -1979.4429931641),
|
||
|
vector2(-61.650188446045, -1986.5238037109),
|
||
|
vector2(-53.568267822266, -1989.6710205078),
|
||
|
vector2(-49.210807800293, -1994.4814453125),
|
||
|
vector2(-39.566497802734, -2020.3823242188),
|
||
|
vector2(-74.735076904297, -2033.3594970703),
|
||
|
vector2(-104.93293762207, -2029.0303955078),
|
||
|
vector2(-105.09645843506, -2039.6833496094),
|
||
|
vector2(-101.85122680664, -2048.6860351562),
|
||
|
vector2(-101.7225112915, -2049.4038085938),
|
||
|
vector2(-85.72745513916, -2093.2482910156),
|
||
|
vector2(-84.908203125, -2097.1889648438),
|
||
|
vector2(-44.1120262146, -2082.5266113281),
|
||
|
vector2(-28.414522171021, -2077.0905761719),
|
||
|
vector2(-19.66005897522, -2081.6242675781),
|
||
|
vector2(-17.005525588989, -2089.7761230469),
|
||
|
vector2(-16.292013168335, -2095.9597167969),
|
||
|
vector2(-18.063987731934, -2105.0646972656),
|
||
|
vector2(-24.122716903687, -2113.2478027344),
|
||
|
vector2(-29.74503326416, -2117.0571289062),
|
||
|
vector2(-69.816352844238, -2131.3469238281),
|
||
|
vector2(-77.692192077637, -2129.7614746094),
|
||
|
vector2(-88.093696594238, -2133.6105957031),
|
||
|
vector2(-92.520805358887, -2139.3259277344),
|
||
|
vector2(-143.04769897461, -2157.0837402344),
|
||
|
vector2(-150.01580810547, -2155.7995605469),
|
||
|
vector2(-159.11499023438, -2158.771484375)
|
||
|
}, {
|
||
|
name="kartzone",
|
||
|
})
|
||
|
|
||
|
CreateThread(function()
|
||
|
while true do
|
||
|
Wait(0)
|
||
|
ClearAreaOfVehicles(-85.162, -2067.108, 21.797, 1000, false, false, false, false, false)
|
||
|
RemoveVehiclesFromGeneratorsInArea(-85.162 - 90.0, -2067.108 - 90.0, 21 - 90.0, -85.162 + 90.0, 2067.108 + 90.0, 21 + 90.0)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
CreateThread(function()
|
||
|
RequestModel(`hc_driver`)
|
||
|
while not HasModelLoaded(`hc_driver`) do
|
||
|
Wait(1)
|
||
|
end
|
||
|
KartingPed = CreatePed(2, `hc_driver`, Config.Locations['Ped'], false, false)
|
||
|
SetPedFleeAttributes(KartingPed, 0, 0)
|
||
|
SetPedDiesWhenInjured(KartingPed, false)
|
||
|
TaskStartScenarioInPlace(KartingPed, "missheistdockssetup1clipboard@base", 0, true)
|
||
|
SetPedKeepTask(KartingPed, true)
|
||
|
SetBlockingOfNonTemporaryEvents(KartingPed, true)
|
||
|
SetEntityInvincible(KartingPed, true)
|
||
|
FreezeEntityPosition(KartingPed, true)
|
||
|
|
||
|
exports['qb-target']:AddBoxZone("KartingPed", Config.Locations['PedTarget'], 1, 1, {
|
||
|
name="KartingPed",
|
||
|
heading=0,
|
||
|
debugpoly = false,
|
||
|
}, {
|
||
|
options = {
|
||
|
{
|
||
|
event = "qb-gocart:client:MenuAluger",
|
||
|
icon = "fas fa-car",
|
||
|
label = "Snak med personen",
|
||
|
}
|
||
|
},
|
||
|
distance = 2.5
|
||
|
})
|
||
|
|
||
|
local blip = AddBlipForCoord(Config.Locations['PedTarget'])
|
||
|
|
||
|
SetBlipSprite (blip, 38)
|
||
|
SetBlipDisplay(blip, 2)
|
||
|
SetBlipScale (blip, 0.7)
|
||
|
SetBlipColour (blip, 3)
|
||
|
SetBlipAsShortRange(blip, true)
|
||
|
|
||
|
BeginTextCommandSetBlipName("STRING")
|
||
|
AddTextComponentString('GoKarting')
|
||
|
EndTextCommandSetBlipName(blip)
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('qb-gocart:client:MenuAluger', function()
|
||
|
if TicketAtivo == true then
|
||
|
exports['qb-menu']:openMenu({
|
||
|
{
|
||
|
header = Lang.MenuHeader,
|
||
|
isMenuHeader = true,
|
||
|
},
|
||
|
{
|
||
|
header = Lang.CloseMenu,
|
||
|
event = "qb-menu:closeMenu",
|
||
|
icon = "fas fa-times-circle",
|
||
|
},
|
||
|
{
|
||
|
header = Lang.StopTicket,
|
||
|
txt = "",
|
||
|
icon = "fas fa-ticket",
|
||
|
event = "qb-gocart:client:Ticket",
|
||
|
params = {
|
||
|
event = "qb-gocart:client:Ticket",
|
||
|
args = 5
|
||
|
},
|
||
|
},
|
||
|
})
|
||
|
else
|
||
|
exports['qb-menu']:openMenu({
|
||
|
{
|
||
|
header = Lang.MenuHeader,
|
||
|
isMenuHeader = true,
|
||
|
},
|
||
|
{
|
||
|
header = Lang.CloseMenu,
|
||
|
event = "qb-menu:closeMenu",
|
||
|
icon = "fas fa-times-circle",
|
||
|
},
|
||
|
{
|
||
|
header = Lang.Ticket1,
|
||
|
txt = Lang.Duration .. Config.Tickets[1].time .. Lang.Minutes .. "<br>" .. Lang.Price .. Config.Tickets[1].price .. ",- DKK",
|
||
|
icon = "fas fa-ticket",
|
||
|
event = "qb-gocart:client:Ticket1",
|
||
|
params = {
|
||
|
event = "qb-gocart:client:Ticket",
|
||
|
args = 1
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
header = Lang.Ticket2,
|
||
|
txt = Lang.Duration .. Config.Tickets[2].time .. Lang.Minutes .. "<br>" .. Lang.Price .. Config.Tickets[2].price .. ",- DKK",
|
||
|
icon = "fas fa-ticket",
|
||
|
event = "qb-gocart:client:Ticket",
|
||
|
params = {
|
||
|
event = "qb-gocart:client:Ticket",
|
||
|
args = 2
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
header = Lang.Ticket3,
|
||
|
txt = Lang.Duration .. Config.Tickets[3].time .. Lang.Minutes .. "<br>" .. Lang.Price .. Config.Tickets[3].price .. ",- DKK",
|
||
|
icon = "fas fa-ticket",
|
||
|
params = {
|
||
|
event = "qb-gocart:client:Ticket",
|
||
|
args = 3
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
header = Lang.Ticket4,
|
||
|
txt = Lang.Duration .. Config.Tickets[4].time .. Lang.Minutes .. "<br>" .. Lang.Price .. Config.Tickets[4].price .. ",- DKK",
|
||
|
icon = "fas fa-ticket",
|
||
|
event = "qb-gocart:client:Ticket",
|
||
|
params = {
|
||
|
event = "qb-gocart:client:Ticket",
|
||
|
args = 4
|
||
|
},
|
||
|
},
|
||
|
})
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
local function drawTxt(text, font, x, y, scale, r, g, b, a)
|
||
|
SetTextFont(font)
|
||
|
SetTextScale(scale, scale)
|
||
|
SetTextColour(r, g, b, a)
|
||
|
SetTextOutline()
|
||
|
SetTextCentre(1)
|
||
|
SetTextEntry("STRING")
|
||
|
AddTextComponentString(text)
|
||
|
DrawText(x, y)
|
||
|
end
|
||
|
|
||
|
local function DeleteVehicle(Time, veh)
|
||
|
local Tempo = Time * 1000
|
||
|
print(Tempo)
|
||
|
|
||
|
Wait(Tempo)
|
||
|
DeleteEntity(Veiculo)
|
||
|
TicketAtivo = false
|
||
|
QBCore.Functions.Notify(Lang.Finished, 'primary', 7500)
|
||
|
end
|
||
|
|
||
|
local function startTimer(Time, veh)
|
||
|
local gameTimer = GetGameTimer()
|
||
|
local EliminarVeiculo = GetVehiclePedIsIn(PlayerPedId(), true)
|
||
|
CreateThread(function()
|
||
|
while TicketAtivo or not TicketAtivo do
|
||
|
Wait(1)
|
||
|
if TicketAtivo == true then
|
||
|
if GetGameTimer() < gameTimer + tonumber(1000 * Time) then
|
||
|
local secondsLeft = GetGameTimer() - gameTimer
|
||
|
drawTxt(Lang.TimeRemaning .. math.ceil(Time - secondsLeft / 1000) .. Lang.Seconds, 4, 0.5, 0.93, 0.50, 255, 255, 255, 180)
|
||
|
end
|
||
|
elseif TicketAtivo == false then
|
||
|
DeleteEntity(Veiculo)
|
||
|
gameTimer = 0
|
||
|
Time = 0
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
local function SpawnKart(Time)
|
||
|
local veiculo = Config.Vehicle
|
||
|
local coords = Config.Locations['KartSpawn']
|
||
|
local EliminarVeiculo = GetVehiclePedIsIn(PlayerPedId(), true)
|
||
|
|
||
|
QBCore.Functions.SpawnVehicle(veiculo, function(veh)
|
||
|
Veiculo = veh
|
||
|
SetVehicleNumberPlateText(veh, "KART"..tostring(math.random(1000, 9999)))
|
||
|
exports['qb-fuel']:SetFuel(veh, 100.0)
|
||
|
TriggerEvent("vehiclekeys:client:SetOwner", GetVehicleNumberPlateText(veh))
|
||
|
SetVehicleEngineOn(veh, true, true)
|
||
|
startTimer(Time, veh)
|
||
|
DeleteVehicle(Time, veh)
|
||
|
end, coords, true)
|
||
|
end
|
||
|
|
||
|
RegisterNetEvent('qb-gocart:client:Ticket', function(args)
|
||
|
if args == 1 and TicketAtivo == false then
|
||
|
local time = Config.Tickets[1].time * 60
|
||
|
|
||
|
TriggerServerEvent('QBCore:Server:RemoveMoney', 'bank', Config.Tickets[1].price)
|
||
|
Time = time
|
||
|
TicketAtivo = true
|
||
|
SpawnKart(Time)
|
||
|
elseif args == 2 and TicketAtivo == false then
|
||
|
local time2 = Config.Tickets[2].time * 60
|
||
|
|
||
|
TriggerServerEvent('QBCore:Server:RemoveMoney', 'bank', Config.Tickets[2].price)
|
||
|
Time = time2
|
||
|
TicketAtivo = true
|
||
|
SpawnKart(Time)
|
||
|
elseif args == 3 and TicketAtivo == false then
|
||
|
local time3 = Config.Tickets[3].time * 60
|
||
|
|
||
|
TriggerServerEvent('QBCore:Server:RemoveMoney', 'bank', Config.Tickets[3].price)
|
||
|
Time = time3
|
||
|
TicketAtivo = true
|
||
|
SpawnKart(Time)
|
||
|
elseif args == 4 and TicketAtivo == false then
|
||
|
local time4 = Config.Tickets[4].time * 60
|
||
|
|
||
|
TriggerServerEvent('QBCore:Server:RemoveMoney', 'bank', Config.Tickets[4].price)
|
||
|
Time = time4
|
||
|
TicketAtivo = true
|
||
|
SpawnKart(Time)
|
||
|
elseif args == 5 and TicketAtivo == true then
|
||
|
TicketAtivo = false
|
||
|
Time = 0
|
||
|
DeleteEntity(Veiculo)
|
||
|
else
|
||
|
QBCore.Functions.Notify(Lang.ActiveTicket, 'error', 7500)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
CreateThread(function()
|
||
|
KartingPoly:onPlayerInOut(function(isPointOutside)
|
||
|
if not isPointOutside then
|
||
|
if TicketAtivo == true then
|
||
|
TicketAtivo = false
|
||
|
Time = 0
|
||
|
DeleteEntity(Veiculo)
|
||
|
QBCore.Functions.Notify(Lang.DeletedVehicle, 'primary', 7500)
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
end)
|