local garages = { { ['x'] = 455.40682983398, ['y'] = -1016.9927368164, ['z'] = 28.412754058838 }, } local menu = { { name = "Compacts", vehicles = { { name = "Blista", price = 15000, model = "blista", }, { name = "Issi", price = 18000, model = "Issi2", }, { name = "Dilettante", price = 25000, model = "Dilettante", }, { name = "Prairie", price = 30000, model = "prairie", }, { name = "Blista Compact", price = 42000, model = "blista", }, { name = "Panto", price = 85000, model = "panto", }, { name = "Rhapsody", price = 120000, model = "rhapsody", }, { name = "Brioso", price = 155000, model = "brioso", } } }, { name = "Sedans", vehicles = { { name = "Regina", price = 8000, model = "regina", }, { name = "Ingot", price = 9000, model = "ingot", }, { name = "Primo", price = 9000, model = "primo", }, { name = "Primo Custom", price = 9500, model = "primo2", }, { name = "Premier", price = 10000, model = "premier", }, { name = "Stanier", price = 10000, model = "stanier", }, { name = "Stratum", price = 10000, model = "stratum", }, { name = "Washington", price = 15000, model = "washington", }, { name = "Intruder", price = 16000, model = "intruder", }, { name = "Stretch", price = 30000, model = "stretch", }, { name = "Surge", price = 38000, model = "surge", }, { name = "Tailgater", price = 55000, model = "tailgater", }, { name = "Schafter", price = 65000, model = "schafter2", }, { name = "Warrener", price = 120000, model = "warrener", }, { name = "Blade", price = 160000, model = "blade", }, { name = "Glendale", price = 200000, model = "glendale", }, { name = "Fugitive", price = 240000, model = "fugitive", }, { name = "Super Diamond", price = 250000, model = "superd", }, { name = "Asea", price = 1000000, model = "asea", }, { name = "Asterope", price = 1000000, model = "asterope", } } }, { name = "Coupes", vehicles = { { name = "Jackal", price = 60000, model = "jackal", }, { name = "Sentinel XS", price = 60000, model = "sentinel2", }, { name = "Zion", price = 60000, model = "zion", }, { name = "Zion Cabrio", price = 65000, model = "zion2", }, { name = "F620", price = 80000, model = "f620", }, { name = "Oracle", price = 80000, model = "oracle", }, { name = "Oracle XS", price = 82000, model = "oracle2", }, { name = "Felon", price = 90000, model = "felon", }, { name = "Sentinel", price = 90000, model = "sentinel", }, { name = "Felon GT", price = 95000, model = "felon2", }, { name = "Cognoscenti Cabrio", price = 180000, model = "cogcabrio", }, { name = "Exemplar", price = 200000, model = "exemplar", }, { name = "Windsor", price = 800000, model = "windsor", }, { name = "Windsor Drop", price = 850000, model = "windsor2", } } }, { name = "Muscle", vehicles = { { name = "Picador", price = 9000, model = "picador", }, { name = "Sabre Turbo", price = 15000, model = "sabregt", }, { name = "Vigero", price = 21000, model = "vigero", }, { name = "Buccaneer", price = 29000, model = "buccaneer", }, { name = "Gauntlet", price = 32000, model = "gauntlet", }, { name = "Buffalo", price = 35000, model = "buffalo", }, { name = "Dominator", price = 35000, model = "dominator", }, { name = "Faction", price = 36000, model = "faction", }, { name = "Dukes", price = 62000, model = "dukes", }, { name = "Hotknife", price = 90000, model = "hotknife", }, { name = "Buffalo S", price = 96000, model = "buffalo2", }, { name = "Virgo", price = 195000, model = "virgo", }, { name = "Chino", price = 225000, model = "chino", }, { name = "Tampa", price = 375000, model = "tampa", }, { name = "Nightshade", price = 585000, model = "nightshade", }, { name = "Coquette BlackFin", price = 695000, model = "coquette3", } } }, { name = "Vans", vehicles = { { name = "Surfer", price = 11000, model = "surfer", }, { name = "Rumpo", price = 13000, model = "rumpo", }, { name = "Journey", price = 15000, model = "journey", }, { name = "Youga", price = 16000, model = "youga", }, { name = "Bobcat XL", price = 23000, model = "bobcatxl", }, { name = "Paradise", price = 25000, model = "paradise", }, { name = "Minivan", price = 30000, model = "minivan", }, { name = "Seminole", price = 30000, model = "seminole", }, { name = "Bison", price = 30000, model = "bison", }, { name = "Gang Burrito", price = 65000, model = "gburrito", } } }, { name = "Off-Road", vehicles = { { name = "Blazer", price = 8000, model = "blazer", }, { name = "Dune Buggy", price = 20000, model = "dune", }, { name = "Rebel", price = 22000, model = "rebel2", }, { name = "Sandking", price = 38000, model = "sandking", }, { name = "Bifta", price = 75000, model = "bifta", }, { name = "Bubsta 6x6", price = 249000, model = "dubsta3", }, { name = "The Liberator", price = 550000, model = "monster", }, { name = "Trophy Truck", price = 550000, model = "trophytruck", }, { name = "Brawler", price = 715000, model = "brawler", } } }, { name = "SUV", vehicles = { { name = "Radius", price = 32000, model = "radi", }, { name = "Granger", price = 35000, model = "granger", }, { name = "Landstalker", price = 58000, model = "landstalker", }, { name = "Cavalcade", price = 60000, model = "cavalcade", }, { name = "Rocoto", price = 85000, model = "rocoto", }, { name = "Baller", price = 90000, model = "baller", }, { name = "Huntley S", price = 195000, model = "huntley", }, { name = "XLS", price = 253000, model = "xls", } } }, { name = "Sport", vehicles = { { name = "Sultan", price = 12000, model = "sultan", }, { name = "Penumbra", price = 24000, model = "penumbra", }, { name = "Fusilade", price = 36000, model = "fusilade", }, { name = "Kuruma", price = 95000, model = "kuruma", }, { name = "Comet", price = 100000, model = "comet2", }, { name = "Banshee", price = 105000, model = "banshee", }, { name = "Surano", price = 110000, model = "surano", }, { name = "9F", price = 120000, model = "ninef", }, { name = "Feltzer", price = 130000, model = "feltzer2", }, { name = "9F Cabrio", price = 130000, model = "ninef2", }, { name = "Coquette", price = 138000, model = "coquette", }, { name = "Schafter V12", price = 140000, model = "schafter3", }, { name = "Rapid GT", price = 140000, model = "rapidgt", }, { name = "Rapid GT Convertible", price = 150000, model = "rapidgt2", }, { name = "Alpha", price = 150000, model = "alpha", }, { name = "Voltic", price = 150000, model = "voltic", }, { name = "Carbonizzare", price = 195000, model = "carbonizzare", }, { name = "Jester", price = 240000, model = "jester", }, { name = "Massacro", price = 275000, model = "massacro", }, { name = "Jester(Racecar)", price = 350000, model = "jester2", }, { name = "Massacro(Racecar)", price = 385000, model = "massacro2", }, { name = "Furore GT", price = 448000, model = "furoregt", }, { name = "Bestia GTS", price = 610000, model = "bestiagts", }, { name = "Verkierer", price = 695000, model = "verlierer2", }, { name = "Omnis", price = 701000, model = "omnis", }, { name = "Tropos", price = 816000, model = "tropos", }, { name = "Drift Tampa", price = 995000, model = "tampa2", }, { name = "Lynx", price = 1735000, model = "lynx", } } }, { name = "Sports", vehicles = { { name = "9F", price = 2000, model = "ninef", } } }, { name = "Super", vehicles = { { name = "Adder", price = 2000, model = "adder", }, { name = "FMJ", price = 2000, model = "fmj", } } } } local inGarage = false local currentMenu = "menu" local selected = 0 local owned = {} function DisplayHelpText(str) BeginTextCommandDisplayHelp("STRING") AddTextComponentScaleform(str) EndTextCommandDisplayHelp(0, 0, 1, -1) end function drawText(top, left, size, str, color, font, center) SetTextFont(font or 0) SetTextScale(1, size) SetTextColour(color[1], color[2], color[3], color[4]) if center then SetTextCentre(true) end BeginTextCommandDisplayText("STRING") AddTextComponentSubstringPlayerName(tostring(str)) EndTextCommandDisplayText(left, top) end RegisterNetEvent('es_garages:notify') AddEventHandler('es_garages:notify', function(str) SetNotificationTextEntry("STRING") AddTextComponentSubstringPlayerName(str) DrawNotification(false, false) end) RegisterNetEvent('es_garages:owned') AddEventHandler('es_garages:owned', function(tab) for i in ipairs(tab) do owned[tab[i]] = true Citizen.Trace(tab[i] .. "\n") end end) RegisterNetEvent('es_garages:spawnVehicle') AddEventHandler('es_garages:spawnVehicle', function(carid) Citizen.CreateThread(function() local playerPed = GetPlayerPed(-1) FreezeEntityPosition(GetPlayerPed(-1), false) Citizen.Trace(carid .. " <- Spawn\n") RequestModel(GetHashKey(carid)) while not HasModelLoaded(GetHashKey(carid)) do Citizen.Wait(0) end local playerCoords = GetEntityCoords(playerPed, false) inGarage = false currentMenu = "menu" selected = 0 local veh = CreateVehicle(GetHashKey(carid), playerCoords.x, playerCoords.y, playerCoords.z - 1.0, 0.0, true, false) TaskWarpPedIntoVehicle(playerPed, veh, -1) SetVehicleDirtLevel(veh, 0) SetVehicleEngineOn(veh, true, true) return end) end) RegisterNetEvent('es_garages:newOwned') AddEventHandler('es_garages:newOwned', function(veh) owned[veh] = true end) Citizen.CreateThread(function() while true do local p = GetEntityCoords(GetPlayerPed(-1), true) for i in ipairs(garages) do local garage = garages[i] DrawMarker(1, garage.x, garage.y, garage.z - 1, 0, 0, 0, 0, 0, 0, 3.4001, 3.4001, 0.8001, 0, 75, 255, 165, 0,0, 0,0) if (Vdist(garage.x, garage.y, garage.z, p.x, p.y, p.z) < 2.4) then if not inGarage then if(IsPedInAnyVehicle(GetPlayerPed(-1), false))then DisplayHelpText("Please leave your vehicle first.") else DisplayHelpText("Press ~INPUT_CONTEXT~ to access the garage") if IsControlJustPressed(1, 51) then inGarage = true FreezeEntityPosition(GetPlayerPed(-1), true) end end else if currentMenu == "menu" then DrawRect(0.15, 0.15, 0.23, 0.05, 0, 0, 0, 255) drawText(0.13, 0.153, 0.5, "Garage", {255, 255, 255, 255}, 0, true) local cur = 0 for i in ipairs(menu) do if cur == selected then DrawRect(0.15, 0.20 + (0.05 * cur), 0.23, 0.05, 40, 40, 40, 200) else DrawRect(0.15, 0.20 + (0.05 * cur), 0.23, 0.05, 100, 100, 100, 200) end drawText(0.18 + (0.05 * cur), 0.153, 0.5, "" .. menu[i].name, {255, 255, 255, 255}, 0, true) cur = cur + 1 end else DrawRect(0.15, 0.15, 0.23, 0.05, 0, 0, 0, 255) drawText(0.13, 0.153, 0.5, "" .. menu[currentMenu + 1].name, {255, 255, 255, 255}, 0, true) local cur = 0 for i in ipairs(menu[currentMenu + 1].vehicles) do if cur == selected then DrawRect(0.15, 0.20 + (0.05 * cur), 0.23, 0.05, 40, 40, 40, 200) else DrawRect(0.15, 0.20 + (0.05 * cur), 0.23, 0.05, 100, 100, 100, 200) end drawText(0.18 + (0.05 * cur), 0.042, 0.5, "" .. menu[currentMenu + 1].vehicles[i].name, {255, 255, 255, 255}, 0, false) if(owned[menu[currentMenu + 1].vehicles[i].model])then drawText(0.18 + (0.05 * cur), 0.182, 0.5, "owned", {255, 255, 255, 255}, 0, false) else drawText(0.18 + (0.05 * cur), 0.182, 0.5, "$" .. menu[currentMenu + 1].vehicles[i].price, {255, 255, 255, 255}, 0, false) end cur = cur + 1 end end if IsControlJustReleased(1, 173) then if currentMenu == "menu" then if selected < (#menu - 1) then selected = selected + 1 end else if selected < (#menu[currentMenu + 1].vehicles - 1) then selected = selected + 1 end end end DisableControlAction(1, 27, true) if IsDisabledControlJustPressed(1, 172) then if selected ~= 0 then selected = selected - 1 end end if IsControlJustReleased(1, 176) then if currentMenu == "menu" then currentMenu = selected selected = 0 else TriggerServerEvent('es_garages:selectVehicle', menu[currentMenu + 1].vehicles[selected + 1].model) end end if IsControlJustReleased(1, 177) then if currentMenu ~= "menu" then currentMenu = "menu" selected = 0 else inGarage = false FreezeEntityPosition(GetPlayerPed(-1), false) end end end end end Citizen.Wait(0) end end)