diff --git a/[core]/mercyv-garage/GetFramework.lua b/[core]/mercyv-garage/GetFramework.lua new file mode 100644 index 00000000..7a84cdf3 --- /dev/null +++ b/[core]/mercyv-garage/GetFramework.lua @@ -0,0 +1,24 @@ +-- GetFramework.lua +-- Shared between client and server + +function GetFrameworkObject() + local object = nil + if Config.Framework == "esx" then + if Config.NewESX then + object = exports['es_extended']:getSharedObject() + else + while object == nil do + TriggerEvent('esx:getSharedObject', function(obj) object = obj end) + Citizen.Wait(0) + end + end + elseif Config.Framework == "newqb" then + object = exports["qb-core"]:GetCoreObject() + elseif Config.Framework == "oldqb" then + while object == nil do + TriggerEvent('QBCore:GetObject', function(obj) object = obj end) + Citizen.Wait(200) + end + end + return object +end diff --git a/[core]/mercyv-garage/client/admin.lua b/[core]/mercyv-garage/client/admin.lua new file mode 100644 index 00000000..c51d7981 --- /dev/null +++ b/[core]/mercyv-garage/client/admin.lua @@ -0,0 +1,155 @@ +-- ============================================================ +-- mercyv-garage | client/admin.lua +-- Ingame Garage-Editor für Admins +-- ============================================================ + +local AdminOpen = false + +-- Server fragt ob Spieler Admin ist und gibt Ergebnis zurück +local PlayerIsAdmin = false +RegisterNetEvent('mercyv-garage:setAdminStatus', function(status) + PlayerIsAdmin = status + if status then + SendNUIMessage({ action = "SET_ADMIN", isAdmin = true }) + end +end) + +-- Bei Laden einmalig Status anfragen +AddEventHandler('onClientResourceStart', function(res) + if res ~= GetCurrentResourceName() then return end + Citizen.Wait(4000) + TriggerServerEvent('mercyv-garage:checkAdminStatus') +end) + +local function IsLocalAdmin() + return PlayerIsAdmin or IsAceAllowed(Config.AdminAce) +end + +-- ────────────────────────────────────────────────────────────── +-- Admin-Panel öffnen +-- ────────────────────────────────────────────────────────────── + +RegisterCommand('garageadmin', function() + if not IsLocalAdmin() then + Config.ClientNotification(Config.Notify.ADMIN_NO_PERM, "error") + return + end + + AdminOpen = true + GarageIsOpen = true -- Verhindert NPC-Interaction-Loop + + SetNuiFocus(true, true) + exports['hex_4_hud']:HideHud(true) + + SendNUIMessage({ + action = "OPEN_ADMIN", + }) + + -- Garagen-Liste direkt an NUI senden (Callback in main.lua handled das) +end, false) + +-- ────────────────────────────────────────────────────────────── +-- Admin-Panel schließen (NUI Callback) +-- ────────────────────────────────────────────────────────────── + +RegisterNUICallback('closeAdmin', function(data, cb) + AdminOpen = false + GarageIsOpen = false + + SetNuiFocus(false, false) + exports['hex_4_hud']:HideHud(false) + + if PreviewVeh and DoesEntityExist(PreviewVeh) then + DeleteEntity(PreviewVeh) + PreviewVeh = nil + end + + CurrentGarage = nil + -- Kurz warten dann Fokus nochmal freigeben (verhindert stuck-Focus) + Citizen.CreateThread(function() + Citizen.Wait(100) + SetNuiFocus(false, false) + end) + cb({}) +end) + +-- ────────────────────────────────────────────────────────────── +-- Positions-Erfassung: NUI wird temporär deaktiviert +-- Spieler geht zur Position, drückt G oder ESC +-- ────────────────────────────────────────────────────────────── + +local CaptureActive = false +local CaptureField = nil + +RegisterNUICallback('startCapture', function(data, cb) + CaptureField = data.field + + -- NUI Fokus temporär aufheben + SetNuiFocus(false, false) + CaptureActive = true + cb({}) + + -- Capture-Thread starten + Citizen.CreateThread(function() + -- Warte auf G (drücken zum erfassen) oder ESC (abbrechen) + while CaptureActive do + -- On-Screen Anleitung + SetTextFont(4) + SetTextScale(0.5, 0.5) + SetTextColour(255, 255, 255, 255) + SetTextEntry("STRING") + AddTextComponentString("~INPUT_CONTEXT~ Position erfassen ~INPUT_FRONTEND_CANCEL~ Abbrechen") + DrawText(0.35, 0.03) + + if IsControlJustPressed(0, 38) then -- E / G + local ped = PlayerPedId() + local coords = GetEntityCoords(ped) + local heading = GetEntityHeading(ped) + + CaptureActive = false + SetNuiFocus(true, true) + + SendNUIMessage({ + action = "POSITION_CAPTURED", + field = CaptureField, + x = coords.x, + y = coords.y, + z = coords.z, + heading = heading, + }) + elseif IsControlJustPressed(0, 200) then -- ESC + CaptureActive = false + SetNuiFocus(true, true) + SendNUIMessage({ action = "CAPTURE_CANCELLED", field = CaptureField }) + end + + Citizen.Wait(0) + end + end) +end) + +-- ────────────────────────────────────────────────────────────── +-- Admin: Teleport zu Garage +-- ────────────────────────────────────────────────────────────── + +RegisterNUICallback('teleportToGarage', function(data, cb) + if not IsLocalAdmin() then cb({}); return end + if data.x and data.y and data.z then + local ped = PlayerPedId() + SetEntityCoords(ped, data.x, data.y, data.z + 0.5, false, false, false, false) + if data.heading then SetEntityHeading(ped, data.heading) end + end + cb({}) +end) + +-- ────────────────────────────────────────────────────────────── +-- Hilfs-Befehl: Aktuelle Koordinaten ausgeben +-- ────────────────────────────────────────────────────────────── + +RegisterCommand('gcoords', function() + local ped = PlayerPedId() + local c = GetEntityCoords(ped) + local h = GetEntityHeading(ped) + print(string.format("[mercyv-garage] Coords: x=%.4f y=%.4f z=%.4f heading=%.4f", c.x, c.y, c.z, h)) + Config.ClientNotification(string.format("X: %.2f Y: %.2f Z: %.2f H: %.2f", c.x, c.y, c.z, h), "info", 6000) +end, false) diff --git a/[core]/mercyv-garage/client/main.lua b/[core]/mercyv-garage/client/main.lua new file mode 100644 index 00000000..57f6b1af --- /dev/null +++ b/[core]/mercyv-garage/client/main.lua @@ -0,0 +1,1156 @@ +local function normPlate(p) + return string.lower(string.gsub(p or '', '%s+', '')) +end + +-- ============================================================ +-- mercyv-garage | client/main.lua +-- Enthält integriertes Vehicle-Persist System +-- ============================================================ + +local Framework = nil +local Garages = {} +local NpcEntities = {} +local BlipEntities = {} +local GarageIsOpen = false +local CurrentGarage = nil +local PreviewVeh = nil +local GarageCam = nil + +-- Persist + +-- Persist: Cache für eigene Fahrzeuge die draußen sind +local MyOutsidePlates = {} +local PersistVehicles = {} -- [normPlate] = {entity=veh, rawPlate="XYZ 123"} +local ActiveJobVehicles = {} -- [normPlate] = rawPlate, ausgeparkte Job-Fahrzeuge + +-- MyOutsidePlates: [normPlate] = rawPlate (Original aus DB) +local function UpdateMyOutsidePlates(vehicles) + MyOutsidePlates = {} + for _, v in ipairs(vehicles) do + if v.stored == 0 then + MyOutsidePlates[normPlate(v.plate)] = v.plate -- raw plate speichern + end + end +end + +local function AddToMyPlates(plate) + MyOutsidePlates[normPlate(plate)] = plate +end + +local function RemoveFromMyPlates(plate) + MyOutsidePlates[normPlate(plate)] = nil +end + +local OutsidePlates = {} -- [normPlate] = true +local PropsQueue = {} -- [netId] = true (Props bereits angefordert) + +-- ────────────────────────────────────────────────────────────── +-- Framework +-- ────────────────────────────────────────────────────────────── + +Citizen.CreateThread(function() + Framework = GetFrameworkObject() +end) + +-- normPlate weiter oben definiert + +-- ────────────────────────────────────────────────────────────── +-- Garagen empfangen & NPCs/Blips aktualisieren +-- ────────────────────────────────────────────────────────────── + +RegisterNetEvent('mercyv-garage:syncGarages', function(data) + Garages = data or {} + local cnt = 0 + for _ in pairs(Garages) do cnt = cnt + 1 end + print(string.format('[mercyv-garage] syncGarages empfangen: %d Garagen', cnt)) + SpawnAllNpcs() + UpdateAllBlips() +end) + +-- ────────────────────────────────────────────────────────────── +-- Robuste Initialisierung: wartet bis Spieler wirklich ingame ist +-- ────────────────────────────────────────────────────────────── + +local clientReadySent = false +local persistReceived = false -- verhindert doppeltes Spawn + +local function SendClientReady() + if clientReadySent then return end + clientReadySent = true + print('[mercyv-garage] Sende clientReady an Server...') + TriggerServerEvent('mercyv-garage:clientReady') +end + +-- Methode 1: via onClientResourceStart +Citizen.CreateThread(function() + while not NetworkIsPlayerActive(PlayerId()) do Citizen.Wait(500) end + Citizen.Wait(2000) + SendClientReady() + + -- Polling: solange Garagen leer sind, alle 5s nochmal anfragen + Citizen.CreateThread(function() + local attempts = 0 + while true do + Citizen.Wait(5000) + local garageCount = 0 + for _ in pairs(Garages) do garageCount = garageCount + 1 end + if garageCount == 0 and attempts < 8 then + attempts = attempts + 1 + print('[mercyv-garage] Garagen noch leer, erneuter Versuch ' .. attempts) + clientReadySent = false -- reset damit nochmal gesendet werden kann + SendClientReady() + else + break + end + end + end) +end) + +-- Methode 2: ESX playerSpawned (Fallback, nur wenn Garagen noch leer) +AddEventHandler('playerSpawned', function() + Citizen.CreateThread(function() + Citizen.Wait(3000) + local garageCount = 0 + for _ in pairs(Garages) do garageCount = garageCount + 1 end + if garageCount == 0 then + print('[mercyv-garage] playerSpawned Fallback: sende clientReady') + clientReadySent = false + SendClientReady() + end + -- Kein zweites clientReady wenn Garagen schon da sind + end) +end) + +-- ────────────────────────────────────────────────────────────── +-- NPC Verwaltung +-- ────────────────────────────────────────────────────────────── + +function SpawnAllNpcs() + for id, ped in pairs(NpcEntities) do + if DoesEntityExist(ped) then DeleteEntity(ped) end + end + NpcEntities = {} + + for id, g in pairs(Garages) do + if g.npc and g.npc.npc then + local n = g.npc.npc + SpawnNpc(id, n.x, n.y, n.z, n.w, g.npc.npcModel or "a_m_m_prolhost_01") + end + end +end + +function SpawnNpc(id, x, y, z, heading, model) + local hash = GetHashKey(model) + RequestModel(hash) + local t = GetGameTimer() + 5000 + while not HasModelLoaded(hash) do + Citizen.Wait(100) + if GetGameTimer() > t then return end + end + -- Z - 1.0 damit NPC auf dem Boden steht (nicht schwebt) + local ped = CreatePed(4, hash, x, y, z - 1.0, heading or 0.0, false, true) + -- Kurz warten dann auf Boden setzen + Citizen.Wait(200) + PlaceObjectOnGroundProperly(ped) + SetEntityInvincible(ped, true) + SetBlockingOfNonTemporaryEvents(ped, true) + FreezeEntityPosition(ped, true) + SetPedFleeAttributes(ped, 0, false) + SetModelAsNoLongerNeeded(hash) + NpcEntities[id] = ped +end + +-- ────────────────────────────────────────────────────────────── +-- Blip Verwaltung +-- ────────────────────────────────────────────────────────────── + +function UpdateAllBlips() + -- Alte Blips entfernen + for _, blip in pairs(BlipEntities) do + if DoesBlipExist(blip) then RemoveBlip(blip) end + end + BlipEntities = {} + + if not Config.Blip then + print('[mercyv-garage] Blips deaktiviert (Config.Blip = false)') + return + end + + -- Spieler-Job für Job-Garagen + local playerJob = nil + if Framework and Config.Framework == 'esx' then + local pd = Framework.GetPlayerData() + playerJob = pd and pd.job and pd.job.name or nil + end + + local cnt = 0 + for id, g in pairs(Garages) do + if not (g.npc and g.npc.npc) then goto skipBlip end + local n = g.npc.npc + + -- Job-Garage: nur für passenden Job + if g.garage == 'jobgarage' then + if not playerJob or g.access == 'none' or playerJob ~= g.access then goto skipBlip end + local blip = AddBlipForCoord(n.x, n.y, n.z) + SetBlipSprite(blip, 357) + SetBlipColour(blip, (g.blip and g.blip.blipColour) or 3) + SetBlipScale(blip, 0.6) + SetBlipAsShortRange(blip, true) + SetBlipDisplay(blip, 6) -- Karte + Minimap, KEIN Legendeneintrag + BeginTextCommandSetBlipName("STRING") + AddTextComponentSubstringPlayerName(g.label or "Garage") + EndTextCommandSetBlipName(blip) + BlipEntities[id] = blip + cnt = cnt + 1 + goto skipBlip + end + + -- Normale Garage: immer anzeigen (außer Impound hat eigenes Icon) + if true then + local blip = AddBlipForCoord(n.x, n.y, n.z) + SetBlipSprite(blip, 357) + SetBlipColour(blip, (g.blip and g.blip.blipColour) or 3) + SetBlipScale(blip, 0.6) + SetBlipAsShortRange(blip, true) + SetBlipDisplay(blip, 6) -- Karte + Minimap, KEIN Legendeneintrag + BeginTextCommandSetBlipName("STRING") + AddTextComponentSubstringPlayerName(g.label or "Garage") + EndTextCommandSetBlipName(blip) + BlipEntities[id] = blip + cnt = cnt + 1 + end + ::skipBlip:: + end + print(string.format('[mercyv-garage] %d Blips gesetzt.', cnt)) +end + +-- ────────────────────────────────────────────────────────────── +-- E-Interaktion NPC → Garage öffnen +-- ────────────────────────────────────────────────────────────── + +Citizen.CreateThread(function() + local hintShown = false + local nearGarage = nil + + while true do + -- Abstandsprüfung: gedrosselt (alle 300ms) + local ped = PlayerPedId() + local pos = GetEntityCoords(ped) + nearGarage = nil + + for id, g in pairs(Garages) do + if g.npc and g.npc.npc then + local n = g.npc.npc + local dist = #(pos - vector3(n.x, n.y, n.z)) + if dist < 5.0 then + nearGarage = id + break + end + end + end + + if nearGarage and not GarageIsOpen then + if not hintShown then + hintShown = true + exports['hex_4_hud']:ShowHelpNotify("Garage öffnen", "E") + end + -- Jeden Frame auf E prüfen wenn in der Nähe + Citizen.Wait(0) + if IsControlJustPressed(0, 38) then + OpenGarage(nearGarage) + end + else + if hintShown then + exports['hex_4_hud']:HideHelpNotify() + hintShown = false + end + Citizen.Wait(300) -- Weit weg: selten prüfen + end + end +end) + +-- ────────────────────────────────────────────────────────────── +-- Einpark-Marker + Interaktion +-- ────────────────────────────────────────────────────────────── + +Citizen.CreateThread(function() + local hintShown = false + local nearPark = nil + while true do + local sleep = 1500 + local ped = PlayerPedId() + local pos = GetEntityCoords(ped) + nearPark = nil + + if not GarageIsOpen and IsPedInAnyVehicle(ped, false) then + for id, g in pairs(Garages) do + local t = g.garage + if t ~= "impound" and t ~= "impoundboat" and t ~= "impoundplane" then + if g.car and g.car.garage then + local gp = g.car.garage + local dist = #(pos - vector3(gp.x, gp.y, gp.z)) + if dist < Config.ParkRadius * 2 then + sleep = 50 + if dist < Config.ParkRadius then + nearPark = id + end + end + end + end + end + end + + if nearPark and not GarageIsOpen then + if not hintShown then + hintShown = true + exports['hex_4_hud']:ShowHelpNotify("Fahrzeug einparken", "E") + end + if IsControlJustPressed(0, 38) then + ParkVehicle(nearPark) + end + else + if hintShown then + exports['hex_4_hud']:HideHelpNotify() + hintShown = false + end + end + + Citizen.Wait(sleep) + end +end) + +-- ────────────────────────────────────────────────────────────── +-- Garage öffnen / schließen +-- ────────────────────────────────────────────────────────────── + +function OpenGarage(garageId) + if GarageIsOpen then return end + local g = Garages[garageId] + if not g then return end + + GarageIsOpen = true + CurrentGarage = garageId + + exports['hex_4_hud']:HideHud(true) + SetNuiFocus(true, true) + TriggerServerEvent('mercyv-garage:getVehicles', garageId) +end + +function CloseGarage() + GarageIsOpen = false + CurrentGarage = nil + + SetNuiFocus(false, false) + exports['hex_4_hud']:HideHud(false) + + if PreviewVeh and DoesEntityExist(PreviewVeh) then + DeleteEntity(PreviewVeh) + PreviewVeh = nil + end + + SendNUIMessage({ action = "CLOSE" }) +end + +-- ────────────────────────────────────────────────────────────── +-- Fahrzeuge vom Server → NUI senden +-- ────────────────────────────────────────────────────────────── + +RegisterNetEvent('mercyv-garage:receiveVehicles', function(vehicles, garageId) + local g = Garages[garageId] + if not g then return end + + -- Outside-Plates aus Fahrzeug-Liste cachen + UpdateMyOutsidePlates(vehicles) + + local nuiVehicles = {} + for _, v in ipairs(vehicles) do + local modelname = v.modelname or '' + local modelHash = tonumber(modelname) + local displayName + if modelHash then + displayName = GetDisplayNameFromVehicleModel(modelHash) + else + displayName = GetDisplayNameFromVehicleModel(modelname) + end + if not displayName or displayName == "CARNOTFOUND" or displayName == '' then + displayName = v.isJobVehicle and (v.label or v.modelname or 'Dienstfahrzeug') or (modelname ~= '' and modelname or 'Fahrzeug') + end + table.insert(nuiVehicles, { + plate = v.plate, + props = v.props, + modelname = v.modelname, + stored = v.stored, + parking = v.parking, + favorite = v.favorite, + vehClass = v.vehClass or 0, + carname = displayName, + carimage = displayName, + }) + end + + local playerName = '' + if Framework and Config.Framework == 'esx' then + local pd = Framework.GetPlayerData() + playerName = pd and pd.name or '' + end + + -- Fahrzeuge in 30m Umkreis scannen (für Einparken-Button) + local nearbyPlates = {} + local ped = PlayerPedId() + local pedPos = GetEntityCoords(ped) + for _, veh in ipairs(GetGamePool('CVehicle')) do + if DoesEntityExist(veh) and not IsEntityDead(veh) then + local vehPos = GetEntityCoords(veh) + local dist = #(pedPos - vehPos) + if dist <= 30.0 then + local plate = normPlate(GetVehicleNumberPlateText(veh)) + if plate ~= '' then + nearbyPlates[plate] = true + end + end + end + end + + -- Fahrzeuge markieren die in der Nähe sind + for _, v in ipairs(nuiVehicles) do + v.nearby = nearbyPlates[normPlate(v.plate)] == true + -- Job-Fahrzeuge: immer verfügbar + if v.isJobVehicle then + v.stored = 1 + -- Einparken: prüfen ob irgendein Fahrzeug vom gleichen Modell in der Nähe steht + -- das in ActiveJobVehicles getrackt ist + local nearbyJobVehicle = false + for np, rawPlate in pairs(ActiveJobVehicles) do + if nearbyPlates[np] then + -- Modell des nahen Fahrzeugs prüfen + for _, veh in ipairs(GetGamePool('CVehicle')) do + if DoesEntityExist(veh) and normPlate(GetVehicleNumberPlateText(veh)) == np then + local vehModel = GetEntityModel(veh) + local jobModel = GetHashKey(v.modelname or v.plate) + if vehModel == jobModel then + nearbyJobVehicle = true + v.nearbyJobPlate = rawPlate -- echtes Kennzeichen für Einparken + end + break + end + end + end + end + v.nearby = nearbyJobVehicle + end + end + + SendNUIMessage({ + action = "OPEN", + vehicles = nuiVehicles, + garageId = garageId, + garageType = g.garage, + playerName = playerName, + impound = Config.Impound, + impoundPrice = Config.ImpoundPrice, + }) +end) + +-- ────────────────────────────────────────────────────────────── +-- Fahrzeug einparken +-- ────────────────────────────────────────────────────────────── + +function ParkVehicle(garageId) + local ped = PlayerPedId() + local vehicle = GetVehiclePedIsIn(ped, false) + if not DoesEntityExist(vehicle) then return end + + local plate = string.gsub(GetVehicleNumberPlateText(vehicle), '%s+', '') + local class = GetVehicleClass(vehicle) + local g = Garages[garageId] + if not g then return end + + local allowed = Config.AllowedClasses[g.garage] or {} + if not allowed[class] then + Config.ClientNotification(Config.Notify.WRONG_CLASS, "error") + return + end + + local props + if Config.Framework == 'esx' and Framework then + props = json.encode(Framework.Game.GetVehicleProperties(vehicle)) + else + props = json.encode({ model = GetEntityModel(vehicle), plate = plate }) + end + + RemoveVehicleKeys(plate, GetEntityModel(vehicle), vehicle) + TaskLeaveVehicle(ped, vehicle, 0) + Citizen.Wait(1500) + DeleteEntity(vehicle) + + -- Aus Persist-Liste entfernen + OutsidePlates[normPlate(plate)] = nil + RemoveFromMyPlates(plate) + TriggerServerEvent('mercyv-garage:parkIn', plate, garageId, props, class) +end + +-- ────────────────────────────────────────────────────────────── +-- Fahrzeug spawnen (nach TakeOut) +-- ────────────────────────────────────────────────────────────── + +RegisterNetEvent('mercyv-garage:doSpawn', function(data) + SpawnVehicle(data, true) +end) + +function SpawnVehicle(data, closeGarageAfter) + local g = Garages[data.garageId] + if not g then return end + + local gType = g.garage or 'normal' + local spawn + + -- Bei Impound: Fahrzeug neben dem Spieler spawnen, nicht am Abschlepphof + if gType == 'impound' or gType == 'impoundboat' or gType == 'impoundplane' then + local pedCoords = GetEntityCoords(PlayerPedId()) + local heading = GetEntityHeading(PlayerPedId()) + -- 5m vor dem Spieler + local rad = math.rad(heading) + spawn = { + x = pedCoords.x + math.sin(-rad) * 5.0, + y = pedCoords.y + math.cos(-rad) * 5.0, + z = pedCoords.z, + w = heading, + } + else + spawn = g.car.spawncar + end + local props = type(data.props) == 'string' and json.decode(data.props) or data.props + local model = nil + + -- Job-Fahrzeug: Modell direkt aus modelname (Modellname als String) + if data.isJobVehicle then + model = GetHashKey(data.modelname or 'adder') + else + -- Normal: aus Props (Hash-Integer) + if props and props.model then + model = tonumber(props.model) or GetHashKey(tostring(props.model)) + end + if not model or model == 0 then + local mn = data.modelname or '' + if mn ~= '' then model = tonumber(mn) or GetHashKey(mn) end + end + if not model or model == 0 then model = GetHashKey('adder') end + end + + RequestModel(model) + local t = GetGameTimer() + 8000 + while not HasModelLoaded(model) do + Citizen.Wait(100) + if GetGameTimer() > t then + Config.ClientNotification("Fahrzeug konnte nicht geladen werden.", "error") + return + end + end + + -- Spawn-Platz prüfen + local nearVeh = GetClosestVehicle(spawn.x, spawn.y, spawn.z, 3.0, 0, 71) + if DoesEntityExist(nearVeh) then + Config.ClientNotification(Config.Notify.SPAWN_BLOCKED, "error") + SetModelAsNoLongerNeeded(model) + TriggerServerEvent('mercyv-garage:parkIn', data.plate, data.garageId, + type(data.props) == 'string' and data.props or json.encode(props), 0) + return + end + + local vehicle = CreateVehicle(model, spawn.x, spawn.y, spawn.z, spawn.w or 0.0, true, false) + local tw = GetGameTimer() + 3000 + while not DoesEntityExist(vehicle) do + if GetGameTimer() > tw then break end + Citizen.Wait(100) + end + + SetVehicleNumberPlateText(vehicle, data.plate) + + if props and Config.Framework == 'esx' and Framework then + Framework.Game.SetVehicleProperties(vehicle, props) + end + + Config.SetVehicleFuel(vehicle, props and props.fuelLevel or 90) + SetModelAsNoLongerNeeded(model) + SetVehicleEngineOn(vehicle, true, true, false) + GiveVehicleKeys(data.plate, model, vehicle) + + -- Job-Fahrzeug: allen Spielern mit gleichem Job Schlüssel geben + if data.isJobVehicle and data.jobAccess then + TriggerServerEvent('mercyv-garage:giveJobKeys', data.plate, data.jobAccess) + -- Random-Plate tracken für Einparken-Button + local np = normPlate(data.plate) + ActiveJobVehicles[np] = data.plate + -- Entity direkt tracken damit Einparken-Erkennung funktioniert + PersistVehicles[np] = { entity = vehicle, rawPlate = data.plate } + end + + -- In Persist-Liste aufnehmen + OutsidePlates[normPlate(data.plate)] = true + AddToMyPlates(data.plate) + + -- Sofort Position speichern (raw plate für DB-Match) + local rawPlateForSave = data.plate -- original aus DB + Citizen.CreateThread(function() + Citizen.Wait(800) + for _, veh in ipairs(GetGamePool('CVehicle')) do + if DoesEntityExist(veh) then + if normPlate(GetVehicleNumberPlateText(veh)) == normPlate(rawPlateForSave) then + local coords = GetEntityCoords(veh) + TriggerServerEvent('mercyv-garage:saveCoords', {{ + plate = rawPlateForSave, -- RAW plate + x = coords.x, y = coords.y, z = coords.z, + heading = GetEntityHeading(veh), + }}) + print('[mercyv-garage Persist] Initiale Position gespeichert: ' .. rawPlateForSave) + break + end + end + end + end) + + if closeGarageAfter then CloseGarage() end + Config.ClientNotification(Config.Notify.TOOK_OUT, "success") +end + +-- ────────────────────────────────────────────────────────────── +-- ══════════ INTEGRIERTES PERSIST SYSTEM ══════════ +-- ────────────────────────────────────────────────────────────── + +-- Außen-Kennzeichen empfangen +RegisterNetEvent('mercyv-garage:outsidePlates', function(plates) + OutsidePlates = {} + for _, p in ipairs(plates) do + OutsidePlates[p] = true + end +end) + +-- Fahrzeuge nach Restart spawnen (Server schickt Liste beim Join) +RegisterNetEvent('mercyv-garage:persistSpawn', function(list) + if not list or #list == 0 then return end + if persistReceived then + print('[mercyv-garage Persist] Duplikat-Spawn ignoriert.') + return + end + persistReceived = true + print(string.format('[mercyv-garage Persist] persistSpawn empfangen: %d Fahrzeuge', #list)) + + Citizen.CreateThread(function() + -- Warten bis Spieler wirklich in der Welt ist (Z > -50 = nicht im Ladescreen) + local waitTimeout = GetGameTimer() + 30000 + repeat + Citizen.Wait(500) + until GetEntityCoords(PlayerPedId()).z > -50.0 or GetGameTimer() > waitTimeout + + Citizen.Wait(1000) -- Extra-Puffer nach Spawn + + for _, v in ipairs(list) do + OutsidePlates[v.plate] = true + AddToMyPlates(v.plate) + end + + local spawned = {} + print(string.format('[mercyv-garage Persist] Spawne %d Fahrzeuge nach Restart...', #list)) + + for _, v in ipairs(list) do + repeat + -- Vorhandene Fahrzeuge mit diesem Kennzeichen löschen + PersistVehicles[normPlate(v.plate)] = nil + for _, veh in ipairs(GetGamePool('CVehicle')) do + if DoesEntityExist(veh) and normPlate(GetVehicleNumberPlateText(veh)) == normPlate(v.plate) then + SetEntityAsMissionEntity(veh, true, true) + DeleteEntity(veh) + end + end + Citizen.Wait(200) + + local modelHash = nil + if v.modelname and v.modelname ~= '' then + local asNum = tonumber(v.modelname) + if asNum then + modelHash = asNum -- direkt als Integer verwenden + else + modelHash = GetHashKey(v.modelname) -- Modellname → Hash + end + end + + -- Fallback: aus Props JSON lesen + if (not modelHash or modelHash == 0) and v.props then + local ok, pd = pcall(json.decode, v.props) + if ok and pd and pd.model then + modelHash = tonumber(pd.model) or GetHashKey(tostring(pd.model)) + end + end + + if not modelHash or modelHash == 0 then break end + + RequestModel(modelHash) + local tModel = GetGameTimer() + 5000 + while not HasModelLoaded(modelHash) do + if GetGameTimer() > tModel then + SetModelAsNoLongerNeeded(modelHash) + break + end + Citizen.Wait(100) + end + if not HasModelLoaded(modelHash) then break end + + local veh = CreateVehicle(modelHash, v.x, v.y, v.z, v.heading, true, false) + local tVeh = GetGameTimer() + 3000 + while not DoesEntityExist(veh) do + if GetGameTimer() > tVeh then break end + Citizen.Wait(100) + end + + if DoesEntityExist(veh) then + SetVehicleNumberPlateText(veh, v.plate) + SetEntityAsMissionEntity(veh, true, true) + + if v.props then + local ok, pd = pcall(json.decode, v.props) + if ok and pd then + if Config.Framework == 'esx' and Framework then + Framework.Game.SetVehicleProperties(veh, pd) + end + if pd.fuelLevel then Config.SetVehicleFuel(veh, pd.fuelLevel) end + end + end + + SetModelAsNoLongerNeeded(modelHash) + table.insert(spawned, v.plate) + print('[mercyv-garage Persist] Gespawnt: ' .. v.plate) + end + until true -- repeat...until true = einmaliger Block mit break-Unterstützung + + Citizen.Wait(150) + end + + if #spawned > 0 then + TriggerServerEvent('mercyv-garage:persistMarkSpawned', spawned) + end + end) +end) + +-- ────────────────────────────────────────────────────────────── +-- Koordinaten speichern (simpel: alle Fahrzeuge des Spielers im Pool) +-- ────────────────────────────────────────────────────────────── + +Citizen.CreateThread(function() + Citizen.Wait(5000) + local lastSaved = {} + + while true do + Citizen.Wait(Config.PersistSaveInterval or 1000) + + -- Alle Fahrzeuge im Pool prüfen + local toSave = {} + local checkedPlates = {} + + -- Methode 1: Direkt getrackte Persist-Entities (auch wenn weit weg) + for normP, data in pairs(PersistVehicles) do + if DoesEntityExist(data.entity) and not IsEntityDead(data.entity) then + local coords = GetEntityCoords(data.entity) + local last = lastSaved[normP] + local moved = not last or + math.abs(coords.x - last.x) > 0.5 or + math.abs(coords.y - last.y) > 0.5 or + math.abs(coords.z - last.z) > 0.5 + if moved then + table.insert(toSave, { + plate = data.rawPlate, + x = coords.x, y = coords.y, z = coords.z, + heading = GetEntityHeading(data.entity), + }) + lastSaved[normP] = { x = coords.x, y = coords.y, z = coords.z } + end + checkedPlates[normP] = true + else + -- Entity existiert nicht mehr → aus Tracking entfernen + PersistVehicles[normP] = nil + end + end + + -- Methode 2: GetGamePool für normal ausgeparkte Fahrzeuge + for _, veh in ipairs(GetGamePool('CVehicle')) do + if DoesEntityExist(veh) and not IsEntityDead(veh) then + local plate = normPlate(GetVehicleNumberPlateText(veh)) + if not checkedPlates[plate] then + local rawPlate = MyOutsidePlates[plate] + if rawPlate then + local coords = GetEntityCoords(veh) + local last = lastSaved[plate] + local moved = not last or + math.abs(coords.x - last.x) > 0.5 or + math.abs(coords.y - last.y) > 0.5 or + math.abs(coords.z - last.z) > 0.5 + if moved then + table.insert(toSave, { + plate = rawPlate, + x = coords.x, + y = coords.y, + z = coords.z, + heading = GetEntityHeading(veh), + }) + lastSaved[plate] = { x = coords.x, y = coords.y, z = coords.z } + end + end + end -- if not checkedPlates + end + end + + if #toSave > 0 then + TriggerServerEvent('mercyv-garage:saveCoords', toSave) + end + end +end) + +-- ────────────────────────────────────────────────────────────── +-- NUI Callbacks +-- ────────────────────────────────────────────────────────────── + +RegisterNUICallback('close', function(data, cb) + CloseGarage() + cb({}) +end) + +-- Admin aus der Garage heraus öffnen +RegisterNUICallback('openAdminFromGarage', function(data, cb) + if PreviewVeh and DoesEntityExist(PreviewVeh) then + DeleteEntity(PreviewVeh) + PreviewVeh = nil + end + -- NUI bleibt offen, Admin-Panel anzeigen + SendNUIMessage({ action = "OPEN_ADMIN" }) + cb({}) +end) + +RegisterNUICallback('takeOut', function(data, cb) + if not CurrentGarage then cb({}); return end + TriggerServerEvent('mercyv-garage:takeOut', data.plate, CurrentGarage, data.vehClass or 0) + cb({}) +end) + +RegisterNUICallback('previewVehicle', function(data, cb) + if not CurrentGarage then cb({}); return end + local g = Garages[CurrentGarage] + if not g or not g.car or not g.car.showcar then cb({}); return end + local sc = g.car.showcar + local model = GetHashKey(data.modelname or '') + if PreviewVeh and DoesEntityExist(PreviewVeh) then DeleteEntity(PreviewVeh); PreviewVeh = nil end + if model == 0 then cb({}); return end + RequestModel(model) + Citizen.CreateThread(function() + local t = GetGameTimer() + 5000 + while not HasModelLoaded(model) do + if GetGameTimer() > t then return end + Citizen.Wait(50) + end + PreviewVeh = CreateVehicle(model, sc.x, sc.y, sc.z, sc.w or 0.0, false, false) + SetEntityInvincible(PreviewVeh, true) + FreezeEntityPosition(PreviewVeh, true) + if data.props then + local ok, pd = pcall(json.decode, data.props) + if ok and pd and Config.Framework == 'esx' and Framework then + Framework.Game.SetVehicleProperties(PreviewVeh, pd) + end + end + SetModelAsNoLongerNeeded(model) + end) + cb({}) +end) + +RegisterNUICallback('setFavorite', function(data, cb) + TriggerServerEvent('mercyv-garage:setFavorite', data.plate, data.value) + cb({}) +end) + +RegisterNUICallback('adminSaveGarage', function(data, cb) + TriggerServerEvent('mercyv-garage:admin:saveGarage', data) + cb({}) +end) + +RegisterNUICallback('adminDeleteGarage', function(data, cb) + TriggerServerEvent('mercyv-garage:admin:deleteGarage', data.id) + cb({}) +end) + +RegisterNUICallback('capturePosition', function(data, cb) + local ped = PlayerPedId() + local c = GetEntityCoords(ped) + cb({ x = c.x, y = c.y, z = c.z, w = GetEntityHeading(ped) }) +end) + +-- Admin-Garagen empfangen und ans NUI schicken +RegisterNetEvent('mercyv-garage:admin:receiveGarages', function(list) + SendNUIMessage({ action = "ADMIN_GARAGES", garages = list }) +end) + +RegisterNUICallback('getAdminGarages', function(data, cb) + -- Sofort Client-Cache zurückgeben falls vorhanden + local list = {} + for id, g in pairs(Garages) do + table.insert(list, { + id = id, label = g.label or id, type = g.garage, access = g.access or "none", + npc_model = g.npc and g.npc.npcModel or "a_m_m_prolhost_01", + npc_x = g.npc and g.npc.npc and g.npc.npc.x or 0, + npc_y = g.npc and g.npc.npc and g.npc.npc.y or 0, + npc_z = g.npc and g.npc.npc and g.npc.npc.z or 0, + npc_heading = g.npc and g.npc.npc and g.npc.npc.w or 0, + spawn_x = g.car and g.car.spawncar and g.car.spawncar.x or 0, + spawn_y = g.car and g.car.spawncar and g.car.spawncar.y or 0, + spawn_z = g.car and g.car.spawncar and g.car.spawncar.z or 0, + spawn_heading = g.car and g.car.spawncar and g.car.spawncar.w or 0, + park_x = g.car and g.car.garage and g.car.garage.x or 0, + park_y = g.car and g.car.garage and g.car.garage.y or 0, + park_z = g.car and g.car.garage and g.car.garage.z or 0, + showcar_x = g.car and g.car.showcar and g.car.showcar.x, + showcar_y = g.car and g.car.showcar and g.car.showcar.y, + showcar_z = g.car and g.car.showcar and g.car.showcar.z, + showcar_heading = g.car and g.car.showcar and g.car.showcar.w or 0, + cam_x = g.camera and g.camera.x, cam_y = g.camera and g.camera.y, + cam_z = g.camera and g.camera.z, cam_rot_z = g.camera and g.camera.rotationZ or -20, + blip_show = g.blip and g.blip.show and 1 or 0, + blip_type = g.blip and g.blip.blipType or 357, + blip_colour = g.blip and g.blip.blipColour or 3, + }) + end + + if #list > 0 then + -- Cache vorhanden → sofort zurückgeben + cb(list) + else + -- Cache leer → Server fragen, Antwort kommt via ADMIN_GARAGES message + TriggerServerEvent('mercyv-garage:admin:requestGarages') + cb({}) + end +end) + +RegisterNUICallback('teleportToGarage', function(data, cb) + if data.x then + SetEntityCoords(PlayerPedId(), data.x, data.y, data.z + 0.5, false, false, false, false) + if data.heading then SetEntityHeading(PlayerPedId(), data.heading) end + end + cb({}) +end) + +-- ────────────────────────────────────────────────────────────── +-- WICHTIGSTE PERSIST-LOGIK: Position beim Verlassen des Fahrzeugs speichern +-- Zuverlässiger als Timer — läuft immer wenn Spieler aussteigt +-- ────────────────────────────────────────────────────────────── + +local lastVehicle = nil + +Citizen.CreateThread(function() + while true do + Citizen.Wait(0) + local ped = PlayerPedId() + local veh = GetVehiclePedIsIn(ped, false) + + if veh ~= 0 then + -- Spieler ist in Fahrzeug + lastVehicle = veh + elseif lastVehicle and lastVehicle ~= 0 then + -- Spieler gerade ausgestiegen + if DoesEntityExist(lastVehicle) then + local plate = GetVehicleNumberPlateText(lastVehicle) + local rawPlate = MyOutsidePlates[normPlate(plate)] + or (PersistVehicles[normPlate(plate)] and PersistVehicles[normPlate(plate)].rawPlate) + + if rawPlate then + local coords = GetEntityCoords(lastVehicle) + local heading = GetEntityHeading(lastVehicle) + TriggerServerEvent('mercyv-garage:saveCoords', {{ + plate = rawPlate, + x = coords.x, + y = coords.y, + z = coords.z, + heading = heading, + }}) + end + end + lastVehicle = nil + end + end +end) + +-- OutsidePlates werden jetzt direkt aus den Fahrzeugdaten gecacht + +-- ────────────────────────────────────────────────────────────── +-- Einparken über Panel-Button (Fahrzeug in 30m Umkreis) +-- ────────────────────────────────────────────────────────────── + +-- Job-Fahrzeug einparken +RegisterNUICallback('parkJobVehicle', function(data, cb) + if not data.plate then cb({}); return end + + -- nearbyJobPlate enthält das echte (random) Kennzeichen + local realPlate = data.nearbyJobPlate or data.plate + local targetPlate = normPlate(realPlate) + local ped = PlayerPedId() + local pedPos = GetEntityCoords(ped) + local foundVeh = nil + + for _, veh in ipairs(GetGamePool('CVehicle')) do + if DoesEntityExist(veh) then + if normPlate(GetVehicleNumberPlateText(veh)) == targetPlate then + local dist = #(pedPos - GetEntityCoords(veh)) + if dist <= 35.0 then + foundVeh = veh + break + end + end + end + end + + if not foundVeh then + Config.ClientNotification("Fahrzeug nicht in der Nähe.", "error") + cb({}); return + end + + local vehModel = GetEntityModel(foundVeh) + TaskLeaveVehicle(ped, foundVeh, 0) + Citizen.Wait(1000) + RemoveVehicleKeys(data.plate, vehModel, foundVeh) + SetEntityAsMissionEntity(foundVeh, true, true) + DeleteEntity(foundVeh) + ActiveJobVehicles[targetPlate] = nil + + TriggerServerEvent('mercyv-garage:parkJobVehicle', data.plate) + CloseGarage() + cb({}) +end) + +RegisterNUICallback('parkFromPanel', function(data, cb) + if not CurrentGarage or not data.plate then cb({}); return end + + local targetPlate = normPlate(data.plate) + local ped = PlayerPedId() + local pedPos = GetEntityCoords(ped) + local foundVeh = nil + + -- Fahrzeug mit diesem Kennzeichen in der Nähe suchen + for _, veh in ipairs(GetGamePool('CVehicle')) do + if DoesEntityExist(veh) then + local plate = normPlate(GetVehicleNumberPlateText(veh)) + if plate == targetPlate then + local dist = #(pedPos - GetEntityCoords(veh)) + if dist <= 35.0 then + foundVeh = veh + break + end + end + end + end + + if not foundVeh then + Config.ClientNotification("Fahrzeug nicht in der Nähe gefunden.", "error") + cb({}) + return + end + + local g = Garages[CurrentGarage] + local class = GetVehicleClass(foundVeh) + local allowed = Config.AllowedClasses[g and g.garage or "normal"] or {} + if not allowed[class] then + Config.ClientNotification(Config.Notify.WRONG_CLASS, "error") + cb({}) + return + end + + local props + if Config.Framework == 'esx' and Framework then + props = json.encode(Framework.Game.GetVehicleProperties(foundVeh)) + else + props = json.encode({ model = GetEntityModel(foundVeh), plate = data.plate }) + end + + RemoveVehicleKeys(data.plate, GetEntityModel(foundVeh), foundVeh) + TaskLeaveVehicle(ped, foundVeh, 0) + Citizen.Wait(1500) + DeleteEntity(foundVeh) + + OutsidePlates[targetPlate] = nil + RemoveFromMyPlates(targetPlate) + TriggerServerEvent('mercyv-garage:parkIn', data.plate, CurrentGarage, props, class) + + CloseGarage() + cb({}) +end) + +-- ────────────────────────────────────────────────────────────── +-- Fahrzeug-Zerstörungs-Detektor +-- ────────────────────────────────────────────────────────────── + +Citizen.CreateThread(function() + while true do + Citizen.Wait(2000) + + -- Alle getracken Persist-Fahrzeuge auf Zerstörung prüfen + for np, data in pairs(PersistVehicles) do + if not DoesEntityExist(data.entity) or IsEntityDead(data.entity) then + -- Fahrzeug zerstört oder verschwunden + print('[mercyv-garage] Fahrzeug zerstört: ' .. tostring(data.rawPlate)) + TriggerServerEvent('mercyv-garage:vehicleDestroyed', data.rawPlate) + PersistVehicles[np] = nil + RemoveFromMyPlates(data.rawPlate) + end + end + + -- Auch normal ausgeparkte Fahrzeuge überwachen (via MyOutsidePlates) + for np, rawPlate in pairs(MyOutsidePlates) do + -- Suche das Fahrzeug im Pool + local found = false + for _, veh in ipairs(GetGamePool('CVehicle')) do + if DoesEntityExist(veh) and not IsEntityDead(veh) then + if normPlate(GetVehicleNumberPlateText(veh)) == np then + found = true + break + end + end + end + -- Wenn nicht gefunden und nicht in PersistVehicles getrackt → wahrscheinlich zerstört + if not found and not PersistVehicles[np] then + -- Nur melden wenn Spieler in der Nähe der letzten bekannten Position war + -- (verhindert false positives durch Streaming) + -- Wir prüfen ob das Fahrzeug in GetGamePool je sichtbar war + -- Konservativ: nur wenn Fahrzeug aus PersistVehicles stammte + end + end + end +end) + +-- ────────────────────────────────────────────────────────────── +-- /dv Command: Fahrzeug löschen → kommt in Impound +-- ────────────────────────────────────────────────────────────── + +RegisterCommand('dv', function() + local ped = PlayerPedId() + local veh = GetVehiclePedIsIn(ped, false) + + if not DoesEntityExist(veh) then + -- Nächstes Fahrzeug in 5m suchen + veh = GetClosestVehicle(GetEntityCoords(ped), 5.0, 0, 71) + end + + if not DoesEntityExist(veh) then + Config.ClientNotification("Kein Fahrzeug in der Nähe.", "error") + return + end + + local plate = GetVehicleNumberPlateText(veh) + + -- Fahrzeug löschen und ins Impound senden + TaskLeaveVehicle(ped, veh, 0) + Citizen.Wait(500) + DeleteEntity(veh) + + -- Aus Tracking entfernen + local np = normPlate(plate) + PersistVehicles[np] = nil + RemoveFromMyPlates(plate) + + -- Server: Fahrzeug → Impound + TriggerServerEvent('mercyv-garage:sendToImpound', plate) + + Config.ClientNotification("Fahrzeug wurde abgeschleppt.", "info") +end, false) diff --git a/[core]/mercyv-garage/config.lua b/[core]/mercyv-garage/config.lua new file mode 100644 index 00000000..e510c4a1 --- /dev/null +++ b/[core]/mercyv-garage/config.lua @@ -0,0 +1,165 @@ +Config = {} + +-- ══════════════════════════════════════════════════════════════ +-- FRAMEWORK & DATABASE +-- ══════════════════════════════════════════════════════════════ + +Config.Framework = "esx" -- "esx" | "newqb" | "oldqb" +Config.NewESX = true +Config.SQL = "oxmysql" + +-- ══════════════════════════════════════════════════════════════ +-- FEATURES +-- ══════════════════════════════════════════════════════════════ + +Config.Blip = true -- Map-Blips anzeigen +Config.Debug = false -- Debug-Ausgaben in der Console + +-- Fahrzeug-Schlüssel System +Config.Vehiclekey = true +Config.VehicleKeySystem = "jaksam" -- jaksam | qs-vehiclekeys | wasabi-carlock | qb-vehiclekeys +Config.VehicleRemoveKey = true +Config.VehicleRemoveKeySystem = "jaksam" + +-- Kraftstoff System +Config.EnableFuel = true +Config.FuelSystem = "x-fuel" -- LegacyFuel | x-fuel | ox-fuel | nd-fuel | frfuel | cdn-fuel + +-- Impound +Config.Impound = true +Config.ImpoundPrice = 1500 +Config.MoneyType = "bank" + +-- Marker Farbe (Einpark-Zone) +Config.MarkerR = 255 +Config.MarkerG = 165 +Config.MarkerB = 0 +Config.MarkerA = 200 + +-- NPC Einstellungen (standard) +Config.DefaultNpcModel = "a_m_m_prolhost_01" +Config.NpcInteractRadius = 2.5 -- Abstand zum NPC für E-Interaktion +Config.ParkRadius = 6.0 -- Einpark-Radius + +-- Wie oft (ms) Fahrzeugpositionen gespeichert werden (Standard: 30 Sek.) +Config.PersistSaveInterval = 1000 + +-- ══════════════════════════════════════════════════════════════ +-- ADMIN +-- ══════════════════════════════════════════════════════════════ + +-- ACE Permission die admins brauchen: add_ace group.admin mercyv-garage.admin allow +Config.AdminAce = "mercyv-garage.admin" + +-- ══════════════════════════════════════════════════════════════ +-- BENACHRICHTIGUNGEN +-- ══════════════════════════════════════════════════════════════ + +Config.Notify = { + GARAGE_OPEN_LATE = "Garage wird geladen...", + NO_VEHICLE = "Du besitzt kein Fahrzeug.", + NOT_OWNED = "Dieses Fahrzeug gehört dir nicht.", + WRONG_CLASS = "Diese Fahrzeugklasse ist hier nicht erlaubt.", + SPAWN_BLOCKED = "Spawn-Platz ist belegt.", + PARKED_IN = "Fahrzeug eingeparkt.", + TOOK_OUT = "Fahrzeug ausgeparkt.", + NO_ACCESS = "Kein Zugang zu dieser Garage.", + NO_MONEY = "Nicht genug Geld.", + IMPOUND_PAID = "Gebühr bezahlt.", + ALREADY_OUT = "Dieses Fahrzeug ist bereits draußen.", + ADMIN_SAVED = "Garage gespeichert.", + ADMIN_DELETED = "Garage gelöscht.", + ADMIN_NO_PERM = "Keine Berechtigung.", +} + +-- ══════════════════════════════════════════════════════════════ +-- NOTIFICATION FUNCTIONS (anpassen wenn nötig) +-- ══════════════════════════════════════════════════════════════ + +Config.ClientNotification = function(message, msgType, length) + exports['hex_4_hud']:Notify("Garage", message, msgType or "info", length or 3000) +end + +Config.ServerNotification = function(source, message, msgType, length) + TriggerClientEvent("hex_4_hud:Notify", source, "Garage", message, msgType or "info", length or 3000) +end + +-- ══════════════════════════════════════════════════════════════ +-- FAHRZEUG-KLASSEN +-- ══════════════════════════════════════════════════════════════ + +Config.AllowedClasses = { + ["normal"] = {[0]=true,[1]=true,[2]=true,[3]=true,[4]=true,[5]=true, + [6]=true,[7]=true,[8]=true,[9]=true,[10]=true,[11]=true, + [12]=true,[13]=true,[17]=true,[18]=true,[19]=true,[20]=true}, + ["aircraft"] = {[15]=true,[16]=true}, + ["boat"] = {[14]=true}, + ["jobgarage"]= {[0]=true,[1]=true,[2]=true,[3]=true,[4]=true,[5]=true, + [6]=true,[7]=true,[8]=true,[9]=true,[10]=true,[11]=true, + [12]=true,[13]=true,[14]=true,[15]=true,[16]=true, + [17]=true,[18]=true,[19]=true,[20]=true}, + ["impound"] = {[0]=true,[1]=true,[2]=true,[3]=true,[4]=true,[5]=true, + [6]=true,[7]=true,[8]=true,[9]=true,[10]=true,[11]=true, + [12]=true,[13]=true,[14]=true,[15]=true,[16]=true, + [17]=true,[18]=true,[19]=true,[20]=true}, +} + +-- ══════════════════════════════════════════════════════════════ +-- JOB-FAHRZEUGE (für Jobgaragen) +-- Diese Fahrzeuge werden in der Job-Garage angezeigt +-- ══════════════════════════════════════════════════════════════ + +Config.JobVehicles = { + ["police"] = { + { model = "gbpolbisonhf", label = "Polizei Bison HF", grade = 0 }, + { model = "police3", label = "Polizei Cruiser", grade = 0 }, + { model = "police4", label = "Polizei Buffalo", grade = 0 }, + { model = "police2", label = "Polizei Stanier", grade = 0 }, + { model = "gbpolbisonstx", label = "Polizei Bison STX", grade = 0 }, + }, + ["ambulance"] = { + { model = "ambulance", label = "Krankenwagen", grade = 0 }, + { model = "frogger", label = "Frogger", grade = 0 }, + }, +} + +-- ══════════════════════════════════════════════════════════════ +-- FUEL HELPER +-- ══════════════════════════════════════════════════════════════ + +Config.SetVehicleFuel = function(vehicle, level) + if not Config.EnableFuel then + SetVehicleFuelLevel(vehicle, (level or 90) + 0.0) + return + end + local fs = Config.FuelSystem + if fs == 'LegacyFuel' then exports["LegacyFuel"]:SetFuel(vehicle, level) + elseif fs == 'x-fuel' then exports["x-fuel"]:SetFuel(vehicle, level) + elseif fs == 'ox-fuel' then SetVehicleFuelLevel(vehicle, level + 0.0) + elseif fs == 'nd-fuel' then exports["nd-fuel"]:SetFuel(vehicle, level) + elseif fs == 'frfuel' then exports.frfuel:setFuel(vehicle, level) + elseif fs == 'cdn-fuel' then exports['cdn-fuel']:SetFuel(vehicle, level) + else SetVehicleFuelLevel(vehicle, (level or 90) + 0.0) end +end + +-- ══════════════════════════════════════════════════════════════ +-- KEY HELPERS +-- ══════════════════════════════════════════════════════════════ + +function GiveVehicleKeys(plate, model, vehicle) + if not Config.Vehiclekey then return end + local ks = Config.VehicleKeySystem + if ks == 'jaksam' then TriggerServerEvent("vehicles_keys:selfGiveVehicleKeys", plate) + elseif ks == 'qs-vehiclekeys' then exports['qs-vehiclekeys']:GiveKeys(plate, GetDisplayNameFromVehicleModel(model)) + elseif ks == 'wasabi-carlock' then exports.wasabi_carlock:GiveKey(plate) + elseif ks == 'qb-vehiclekeys' then TriggerServerEvent('qb-vehiclekeys:server:AcquireVehicleKeys', plate) end +end + +function RemoveVehicleKeys(plate, model, vehicle) + if not Config.VehicleRemoveKey then return end + local ks = Config.VehicleRemoveKeySystem + if ks == 'jaksam' then TriggerServerEvent("vehicles_keys:selfRemoveKeys", plate) + elseif ks == 'qs-vehiclekeys' then exports['qs-vehiclekeys']:RemoveKeysAuto() + elseif ks == 'wasabi-carlock' then exports.wasabi_carlock:RemoveKey(plate) + elseif ks == 'qb-vehiclekeys' then TriggerServerEvent('qb-vehiclekeys:client:RemoveKeys', plate) end +end diff --git a/[core]/mercyv-garage/fxmanifest.lua b/[core]/mercyv-garage/fxmanifest.lua new file mode 100644 index 00000000..3af4977a --- /dev/null +++ b/[core]/mercyv-garage/fxmanifest.lua @@ -0,0 +1,34 @@ +fx_version 'cerulean' +game 'gta5' +lua54 'yes' +author 'MercyV' +description 'mercyv-garage - Custom Garage System' +version '1.0' + +shared_scripts { + 'config.lua', +} + +server_scripts { + '@oxmysql/lib/MySQL.lua', + 'server/main.lua', +} + +client_scripts { + 'GetFramework.lua', + 'client/main.lua', + 'client/admin.lua', +} + +ui_page 'nui/index.html' + +files { + 'nui/index.html', + 'nui/style.css', + 'nui/script.js', + 'nui/vue.js', + 'nui/fonts/*.*', + 'nui/images/*.*', + 'nui/images/logo/*.*', + 'nui/images/cars/*.*', +} diff --git a/[core]/mercyv-garage/install.sql b/[core]/mercyv-garage/install.sql new file mode 100644 index 00000000..a37fb6f7 --- /dev/null +++ b/[core]/mercyv-garage/install.sql @@ -0,0 +1,200 @@ +-- ============================================================ +-- mercyv-garage | install.sql +-- Einmalig ausführen! +-- ============================================================ + +CREATE TABLE IF NOT EXISTS `mercyv_garages` ( + `id` VARCHAR(80) NOT NULL, + `label` VARCHAR(100) NOT NULL DEFAULT 'Garage', + `type` VARCHAR(20) NOT NULL DEFAULT 'normal', + `access` VARCHAR(50) NOT NULL DEFAULT 'none', + `gang` VARCHAR(50) NOT NULL DEFAULT 'none', + `blip_show` TINYINT(1) NOT NULL DEFAULT 1, + `blip_type` INT NOT NULL DEFAULT 357, + `blip_colour` INT NOT NULL DEFAULT 3, + `npc_model` VARCHAR(100) NOT NULL DEFAULT 'a_m_m_prolhost_01', + `npc_x` FLOAT NOT NULL DEFAULT 0, + `npc_y` FLOAT NOT NULL DEFAULT 0, + `npc_z` FLOAT NOT NULL DEFAULT 0, + `npc_heading` FLOAT NOT NULL DEFAULT 0, + `spawn_x` FLOAT NOT NULL DEFAULT 0, + `spawn_y` FLOAT NOT NULL DEFAULT 0, + `spawn_z` FLOAT NOT NULL DEFAULT 0, + `spawn_heading` FLOAT NOT NULL DEFAULT 0, + `park_x` FLOAT NOT NULL DEFAULT 0, + `park_y` FLOAT NOT NULL DEFAULT 0, + `park_z` FLOAT NOT NULL DEFAULT 0, + `showcar_x` FLOAT DEFAULT NULL, + `showcar_y` FLOAT DEFAULT NULL, + `showcar_z` FLOAT DEFAULT NULL, + `showcar_heading` FLOAT DEFAULT 0, + `cam_x` FLOAT DEFAULT NULL, + `cam_y` FLOAT DEFAULT NULL, + `cam_z` FLOAT DEFAULT NULL, + `cam_rot_z` FLOAT DEFAULT -20, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- Klassen-Spalte zu owned_vehicles (ESX) hinzufügen +ALTER TABLE `owned_vehicles` + ADD COLUMN IF NOT EXISTS `veh_class` TINYINT DEFAULT 0; + +-- ============================================================ +-- Standard-Garagen aus der Config (können ingame geändert werden) +-- ============================================================ + +INSERT IGNORE INTO `mercyv_garages` + (id, label, type, access, blip_show, blip_type, blip_colour, npc_model, + npc_x, npc_y, npc_z, npc_heading, + spawn_x, spawn_y, spawn_z, spawn_heading, + park_x, park_y, park_z, + showcar_x, showcar_y, showcar_z, showcar_heading, + cam_x, cam_y, cam_z, cam_rot_z) +VALUES +('Garage A','Garage A','normal','none',1,357,3,'a_m_m_prolhost_01', + 214.5806,-806.8969,30.8052,336.3445, + 233.7616,-802.9507,30.4636,71.0069, + 214.9846,-790.6285,30.8301, + 236.39,-779.89,30.67,161.68, + 234.57,-785.1,30.59,-20.0), + +('Garage B','Garage B','normal','none',1,357,3,'a_m_m_prolhost_01', + 275.95,-344.06,45.17,165.24, + 292.79,-332.22,44.92,161.25, + 271.68,-341.61,44.92, + 274.63,-330.28,44.70,164.27, + 273.08,-335.04,44.92,-20.0), + +('Garage D','Garage D','normal','none',1,357,3,'a_m_m_prolhost_01', + 68.35,13.85,69.21,167.77, + 73.24,11.78,68.85,155.92, + 73.24,11.78,68.85, + 59.35,24.31,69.73,245.08, + 64.78,22.19,69.54,70.0), + +('Garage E','Garage E','normal','none',1,357,3,'a_m_m_prolhost_01', + 363.48,296.86,103.50,244.81, + 367.98,296.57,103.42,345.36, + 367.98,296.57,103.42, + 376.33,288.82,103.20,69.26, + 371.18,290.66,103.31,-110.0), + +('Garage F','Garage F','normal','none',1,357,3,'a_m_m_prolhost_01', + -1158.51,-740.67,19.89,41.16, + -1169.03,-743.49,19.63,42.38, + -1169.03,-743.49,19.63, + -1145.2,-759.03,18.82,39.92, + -1148.57,-754.86,18.97,-140.0), + +('Garage G','Garage G','normal','none',1,357,3,'a_m_m_prolhost_01', + -795.33,-2023.8,9.17,66.37, + -790.11,-2022.68,8.87,58.85, + -791.39,-2030.26,8.87, + -763.11,-2042.28,8.91,37.29, + -766.54,-2037.82,8.9,-143.0), + +('Garage H','Garage H','normal','none',1,357,3,'a_m_m_prolhost_01', + -468.87,-819.67,30.52,358.04, + -472.16,-812.83,30.53,179.63, + -453.49,-814.23,30.58, + -472.02,-800.43,30.54,183.47, + -472.16,-806.15,30.54,-3.0), + +('Garage I','Garage I','normal','none',1,357,3,'a_m_m_prolhost_01', + 1142.38,2661.28,38.16,92.19, + 1137.57,2674.86,38.25,1.08, + 1137.59,2653.02,38.0, + 1121.15,2665.03,38.02,266.97, + 1127.68,2664.84,38.02,88.0), + +('Garage J','Garage J','normal','none',1,357,3,'a_m_m_prolhost_01', + 83.51,6420.3,31.76,313.17, + 85.93,6426.8,31.34,38.93, + 79.68,6417.33,31.28, + 112.65,6396.47,31.31,42.5, + 107.37,6402.14,31.33,-138.0), + +('Garage K','Boot Garage','boat','none',1,356,3,'a_m_m_prolhost_01', + -717.9,-1327.46,1.6,50.86, + -718.05,-1334.24,-0.44,222.71, + -718.03,-1334.21,1.0, + -723.7,-1329.22,-0.11,229.03, + -719.57,-1332.72,1.41,50.0), + +('Garage L','Flugzeug Garage','aircraft','none',1,359,3,'a_m_m_prolhost_01', + -1251.69,-3399.94,13.94,59.19, + -1246.91,-3355.14,13.95,330.68, + -1246.91,-3355.14,13.95, + -1273.01,-3402.28,13.94,331.01, + -1268.42,-3394.32,13.94,-210.0), + +('Garage M','Garage M','normal','none',1,357,3,'a_m_m_prolhost_01', + 271.94,-1509.32,29.18,87.30, + 243.22,-1502.84,29.14,222.92, + 243.22,-1502.84,29.14, + 253.68,-1511.65,29.14,260.14, + 256.95,-1500.42,29.14,-200.0), + +('Garage N','Garage N','normal','none',1,357,3,'a_m_m_prolhost_01', + -1134.78,2682.73,18.46,132.28, + -1155.64,2665.05,18.09,223.0, + -1141.49,2680.13,18.09, + -1157.10,2672.85,18.09,175.18, + -1145.82,2670.54,19.75,-280.0), + +('Garage T','Garage T','normal','none',1,357,3,'a_m_m_prolhost_01', + 302.3,-189.94,61.57,73.01, + 288.09,-194.55,61.57,249.13, + 301.1,-183.12,61.59, + 274.64,-189.47,61.57,252.0, + 279.92,-191.36,61.57,61.57), + +('Impound Garage','Abschlepphof','impound','none',1,68,3,'a_m_m_prolhost_01', + 406.88,-1625.23,29.29,229.89, + 408.0,-1645.66,29.29,228.92, + 408.0,-1645.66,29.29, + 401.4,-1639.93,29.29,230.79, + 406.0,-1643.48,29.29,50.29), + +('Impound Boat','Abschlepphof Boot','impoundboat','none',1,357,3,'a_m_m_prolhost_01', + -769.64,-1425.65,1.60,230.0, + -786.56,-1424.55,-0.51,133.50, + -786.56,-1424.55,-0.51, + -786.56,-1424.55,-0.51,133.50, + -795.95,-1436.94,3.06,322.48), + +('Impound Plane','Abschlepphof Flugzeug','impoundplane','none',1,357,3,'a_m_m_prolhost_01', + -1030.27,-3016.30,13.95,339.01, + -979.81,-2995.32,13.95,69.51, + -979.81,-2995.32,13.95, + -984.89,-3012.54,13.95,61.43, + -994.19,-3008.20,13.95,236.98), + +('police','Polizei Garage','jobgarage','police',0,357,3,'ig_solomon', + 457.60,-977.66,21.95,87.43, + 449.80,-971.60,21.45,177.42, + 449.42,-979.14,21.45, + 417.47,-974.65,21.45,177.18, + 428.37,-974.73,21.45,-270.0), + +('ambulance','Ambulanz Garage','jobgarage','ambulance',0,357,3,'ig_solomon', + -286.81,-588.56,27.78,1.87, + -286.29,-576.06,27.63,85.73, + -285.72,-580.70,27.63, + -305.70,-567.67,27.63,296.93, + -311.61,-563.86,27.63,-110.0); + +-- ============================================================ +-- Vehicle Persist: last_coords Spalte +-- (wird automatisch vom Script genutzt) +-- ============================================================ + +-- ESX: +ALTER TABLE `owned_vehicles` + ADD COLUMN IF NOT EXISTS `veh_class` TINYINT DEFAULT 0, + ADD COLUMN IF NOT EXISTS `last_coords` VARCHAR(255) DEFAULT NULL; + +-- QBCore: +-- ALTER TABLE `player_vehicles` +-- ADD COLUMN IF NOT EXISTS `veh_class` TINYINT DEFAULT 0, +-- ADD COLUMN IF NOT EXISTS `last_coords` VARCHAR(255) DEFAULT NULL; diff --git a/[core]/mercyv-garage/nui/fonts/Gilroy-ExtraBold.otf b/[core]/mercyv-garage/nui/fonts/Gilroy-ExtraBold.otf new file mode 100644 index 00000000..7413e3d4 Binary files /dev/null and b/[core]/mercyv-garage/nui/fonts/Gilroy-ExtraBold.otf differ diff --git a/[core]/mercyv-garage/nui/fonts/Gilroy-Light.otf b/[core]/mercyv-garage/nui/fonts/Gilroy-Light.otf new file mode 100644 index 00000000..dbc05129 Binary files /dev/null and b/[core]/mercyv-garage/nui/fonts/Gilroy-Light.otf differ diff --git a/[core]/mercyv-garage/nui/images/cars/Adder.png b/[core]/mercyv-garage/nui/images/cars/Adder.png new file mode 100644 index 00000000..6bd64c06 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Adder.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Airbus.png b/[core]/mercyv-garage/nui/images/cars/Airbus.png new file mode 100644 index 00000000..b8e3c78d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Airbus.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Akuma.png b/[core]/mercyv-garage/nui/images/cars/Akuma.png new file mode 100644 index 00000000..027cb5b8 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Akuma.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Alpha.png b/[core]/mercyv-garage/nui/images/cars/Alpha.png new file mode 100644 index 00000000..b06f978e Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Alpha.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Alphaz1.png b/[core]/mercyv-garage/nui/images/cars/Alphaz1.png new file mode 100644 index 00000000..12a6fe91 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Alphaz1.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Ambulance.png b/[core]/mercyv-garage/nui/images/cars/Ambulance.png new file mode 100644 index 00000000..b4272db8 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Ambulance.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Ardent.png b/[core]/mercyv-garage/nui/images/cars/Ardent.png new file mode 100644 index 00000000..8a174e38 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Ardent.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Asbo.png b/[core]/mercyv-garage/nui/images/cars/Asbo.png new file mode 100644 index 00000000..27cbee9c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Asbo.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Asea.png b/[core]/mercyv-garage/nui/images/cars/Asea.png new file mode 100644 index 00000000..f85cd9a3 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Asea.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Asea2.png b/[core]/mercyv-garage/nui/images/cars/Asea2.png new file mode 100644 index 00000000..4fbb7bef Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Asea2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Asterope.png b/[core]/mercyv-garage/nui/images/cars/Asterope.png new file mode 100644 index 00000000..32c8598b Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Asterope.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Autarch.png b/[core]/mercyv-garage/nui/images/cars/Autarch.png new file mode 100644 index 00000000..6b83aea3 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Autarch.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Avarus.png b/[core]/mercyv-garage/nui/images/cars/Avarus.png new file mode 100644 index 00000000..44377ce9 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Avarus.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Bagger.png b/[core]/mercyv-garage/nui/images/cars/Bagger.png new file mode 100644 index 00000000..59715bf1 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Bagger.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Baller.png b/[core]/mercyv-garage/nui/images/cars/Baller.png new file mode 100644 index 00000000..a3587ed0 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Baller.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Baller2.png b/[core]/mercyv-garage/nui/images/cars/Baller2.png new file mode 100644 index 00000000..75f902a9 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Baller2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Baller3.png b/[core]/mercyv-garage/nui/images/cars/Baller3.png new file mode 100644 index 00000000..8bee4ed9 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Baller3.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Baller4.png b/[core]/mercyv-garage/nui/images/cars/Baller4.png new file mode 100644 index 00000000..eff9ff89 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Baller4.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Baller5.png b/[core]/mercyv-garage/nui/images/cars/Baller5.png new file mode 100644 index 00000000..04e297b2 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Baller5.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Baller6.png b/[core]/mercyv-garage/nui/images/cars/Baller6.png new file mode 100644 index 00000000..83f6f13a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Baller6.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Banshee.png b/[core]/mercyv-garage/nui/images/cars/Banshee.png new file mode 100644 index 00000000..b34fb0d2 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Banshee.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Banshee2.png b/[core]/mercyv-garage/nui/images/cars/Banshee2.png new file mode 100644 index 00000000..5e775115 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Banshee2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Bati.png b/[core]/mercyv-garage/nui/images/cars/Bati.png new file mode 100644 index 00000000..4967fb88 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Bati.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Bati2.png b/[core]/mercyv-garage/nui/images/cars/Bati2.png new file mode 100644 index 00000000..b38405af Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Bati2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Bestiagts.png b/[core]/mercyv-garage/nui/images/cars/Bestiagts.png new file mode 100644 index 00000000..37066a09 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Bestiagts.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Bf400.png b/[core]/mercyv-garage/nui/images/cars/Bf400.png new file mode 100644 index 00000000..e29457ee Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Bf400.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Bfinject.png b/[core]/mercyv-garage/nui/images/cars/Bfinject.png new file mode 100644 index 00000000..127242d3 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Bfinject.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Bifta.png b/[core]/mercyv-garage/nui/images/cars/Bifta.png new file mode 100644 index 00000000..9280f75c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Bifta.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Bison.png b/[core]/mercyv-garage/nui/images/cars/Bison.png new file mode 100644 index 00000000..c4198d14 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Bison.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Bison2.png b/[core]/mercyv-garage/nui/images/cars/Bison2.png new file mode 100644 index 00000000..ffd41abb Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Bison2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Bison3.png b/[core]/mercyv-garage/nui/images/cars/Bison3.png new file mode 100644 index 00000000..831000e0 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Bison3.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Bjxl.png b/[core]/mercyv-garage/nui/images/cars/Bjxl.png new file mode 100644 index 00000000..92db54db Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Bjxl.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Blade.png b/[core]/mercyv-garage/nui/images/cars/Blade.png new file mode 100644 index 00000000..6d7ac439 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Blade.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Blazer.png b/[core]/mercyv-garage/nui/images/cars/Blazer.png new file mode 100644 index 00000000..00992b17 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Blazer.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Blista.png b/[core]/mercyv-garage/nui/images/cars/Blista.png new file mode 100644 index 00000000..19311d27 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Blista.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Blista2.png b/[core]/mercyv-garage/nui/images/cars/Blista2.png new file mode 100644 index 00000000..d51d6d15 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Blista2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Blista3.png b/[core]/mercyv-garage/nui/images/cars/Blista3.png new file mode 100644 index 00000000..d4d7922a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Blista3.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Bobcatxl.png b/[core]/mercyv-garage/nui/images/cars/Bobcatxl.png new file mode 100644 index 00000000..0e79aa29 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Bobcatxl.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Bodhi2.png b/[core]/mercyv-garage/nui/images/cars/Bodhi2.png new file mode 100644 index 00000000..b626211a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Bodhi2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Brawler.png b/[core]/mercyv-garage/nui/images/cars/Brawler.png new file mode 100644 index 00000000..f76bcf00 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Brawler.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Brioso.png b/[core]/mercyv-garage/nui/images/cars/Brioso.png new file mode 100644 index 00000000..891c710f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Brioso.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Brutus.png b/[core]/mercyv-garage/nui/images/cars/Brutus.png new file mode 100644 index 00000000..c38d88dd Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Brutus.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Brutus2.png b/[core]/mercyv-garage/nui/images/cars/Brutus2.png new file mode 100644 index 00000000..b7612adf Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Brutus2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Btype.png b/[core]/mercyv-garage/nui/images/cars/Btype.png new file mode 100644 index 00000000..7edb4518 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Btype.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Btype2.png b/[core]/mercyv-garage/nui/images/cars/Btype2.png new file mode 100644 index 00000000..bbc89fef Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Btype2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Btype3.png b/[core]/mercyv-garage/nui/images/cars/Btype3.png new file mode 100644 index 00000000..1a226387 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Btype3.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Buccaneer.png b/[core]/mercyv-garage/nui/images/cars/Buccaneer.png new file mode 100644 index 00000000..14e63b5b Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Buccaneer.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Buffalo.png b/[core]/mercyv-garage/nui/images/cars/Buffalo.png new file mode 100644 index 00000000..7c3ad9c3 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Buffalo.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Bullet.png b/[core]/mercyv-garage/nui/images/cars/Bullet.png new file mode 100644 index 00000000..d55eabaf Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Bullet.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Carbonizzare.png b/[core]/mercyv-garage/nui/images/cars/Carbonizzare.png new file mode 100644 index 00000000..4ec901ef Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Carbonizzare.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Carbonrs.png b/[core]/mercyv-garage/nui/images/cars/Carbonrs.png new file mode 100644 index 00000000..abfe56e5 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Carbonrs.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Casco.png b/[core]/mercyv-garage/nui/images/cars/Casco.png new file mode 100644 index 00000000..62257f9f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Casco.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Cavalcade.png b/[core]/mercyv-garage/nui/images/cars/Cavalcade.png new file mode 100644 index 00000000..3cdded26 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Cavalcade.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Cavalcade2.png b/[core]/mercyv-garage/nui/images/cars/Cavalcade2.png new file mode 100644 index 00000000..abd50ae4 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Cavalcade2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Cheburek.png b/[core]/mercyv-garage/nui/images/cars/Cheburek.png new file mode 100644 index 00000000..b4d81699 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Cheburek.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Cheetah.png b/[core]/mercyv-garage/nui/images/cars/Cheetah.png new file mode 100644 index 00000000..5c8f8698 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Cheetah.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Cheetah2.png b/[core]/mercyv-garage/nui/images/cars/Cheetah2.png new file mode 100644 index 00000000..6287ba4d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Cheetah2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Chimera.png b/[core]/mercyv-garage/nui/images/cars/Chimera.png new file mode 100644 index 00000000..b37a12be Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Chimera.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Chino.png b/[core]/mercyv-garage/nui/images/cars/Chino.png new file mode 100644 index 00000000..e8b50beb Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Chino.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Chino2.png b/[core]/mercyv-garage/nui/images/cars/Chino2.png new file mode 100644 index 00000000..c25562cd Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Chino2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Cliffhanger.png b/[core]/mercyv-garage/nui/images/cars/Cliffhanger.png new file mode 100644 index 00000000..1632f114 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Cliffhanger.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Clique.png b/[core]/mercyv-garage/nui/images/cars/Clique.png new file mode 100644 index 00000000..015cb3a4 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Clique.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Club.png b/[core]/mercyv-garage/nui/images/cars/Club.png new file mode 100644 index 00000000..1a14269a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Club.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Cog55.png b/[core]/mercyv-garage/nui/images/cars/Cog55.png new file mode 100644 index 00000000..8cf192a2 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Cog55.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Cog552.png b/[core]/mercyv-garage/nui/images/cars/Cog552.png new file mode 100644 index 00000000..4dc5a9fe Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Cog552.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Cogcabrio.png b/[core]/mercyv-garage/nui/images/cars/Cogcabrio.png new file mode 100644 index 00000000..e9825ef8 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Cogcabrio.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Cognoscenti Cabrio.png b/[core]/mercyv-garage/nui/images/cars/Cognoscenti Cabrio.png new file mode 100644 index 00000000..c102e6a7 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Cognoscenti Cabrio.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Cognoscenti-Cabrio.png b/[core]/mercyv-garage/nui/images/cars/Cognoscenti-Cabrio.png new file mode 100644 index 00000000..99059ed8 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Cognoscenti-Cabrio.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Comet2.png b/[core]/mercyv-garage/nui/images/cars/Comet2.png new file mode 100644 index 00000000..592f837f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Comet2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Comet3.png b/[core]/mercyv-garage/nui/images/cars/Comet3.png new file mode 100644 index 00000000..82b80923 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Comet3.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Comet4.png b/[core]/mercyv-garage/nui/images/cars/Comet4.png new file mode 100644 index 00000000..3400df37 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Comet4.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Comet5.png b/[core]/mercyv-garage/nui/images/cars/Comet5.png new file mode 100644 index 00000000..c7d3d7ab Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Comet5.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Contender.png b/[core]/mercyv-garage/nui/images/cars/Contender.png new file mode 100644 index 00000000..bccdbd70 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Contender.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Coquette.png b/[core]/mercyv-garage/nui/images/cars/Coquette.png new file mode 100644 index 00000000..caac60a2 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Coquette.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Coquette2.png b/[core]/mercyv-garage/nui/images/cars/Coquette2.png new file mode 100644 index 00000000..46eda62c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Coquette2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Coquette3.png b/[core]/mercyv-garage/nui/images/cars/Coquette3.png new file mode 100644 index 00000000..10f5c9da Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Coquette3.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Coquette4.png b/[core]/mercyv-garage/nui/images/cars/Coquette4.png new file mode 100644 index 00000000..87655b58 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Coquette4.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Cyclone.png b/[core]/mercyv-garage/nui/images/cars/Cyclone.png new file mode 100644 index 00000000..efe0fa16 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Cyclone.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Daemon.png b/[core]/mercyv-garage/nui/images/cars/Daemon.png new file mode 100644 index 00000000..db512c15 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Daemon.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Daemon2.png b/[core]/mercyv-garage/nui/images/cars/Daemon2.png new file mode 100644 index 00000000..5dfbc634 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Daemon2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Defiler.png b/[core]/mercyv-garage/nui/images/cars/Defiler.png new file mode 100644 index 00000000..01176f3c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Defiler.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Deluxo.png b/[core]/mercyv-garage/nui/images/cars/Deluxo.png new file mode 100644 index 00000000..4f716234 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Deluxo.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Deveste.png b/[core]/mercyv-garage/nui/images/cars/Deveste.png new file mode 100644 index 00000000..ab71cb26 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Deveste.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Deviant.png b/[core]/mercyv-garage/nui/images/cars/Deviant.png new file mode 100644 index 00000000..5b0ecc5f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Deviant.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Dloader.png b/[core]/mercyv-garage/nui/images/cars/Dloader.png new file mode 100644 index 00000000..0dbd5276 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Dloader.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Double.png b/[core]/mercyv-garage/nui/images/cars/Double.png new file mode 100644 index 00000000..83a79e43 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Double.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Dukes.png b/[core]/mercyv-garage/nui/images/cars/Dukes.png new file mode 100644 index 00000000..ed7504c6 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Dukes.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Dynasty.png b/[core]/mercyv-garage/nui/images/cars/Dynasty.png new file mode 100644 index 00000000..0659a31b Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Dynasty.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Elegy.png b/[core]/mercyv-garage/nui/images/cars/Elegy.png new file mode 100644 index 00000000..41fdcdaa Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Elegy.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Elegy2.png b/[core]/mercyv-garage/nui/images/cars/Elegy2.png new file mode 100644 index 00000000..12964740 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Elegy2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Ellie.png b/[core]/mercyv-garage/nui/images/cars/Ellie.png new file mode 100644 index 00000000..d2788f37 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Ellie.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Emerus.png b/[core]/mercyv-garage/nui/images/cars/Emerus.png new file mode 100644 index 00000000..84b59686 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Emerus.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Emperor.png b/[core]/mercyv-garage/nui/images/cars/Emperor.png new file mode 100644 index 00000000..27232301 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Emperor.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Enduro.png b/[core]/mercyv-garage/nui/images/cars/Enduro.png new file mode 100644 index 00000000..49eef7a0 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Enduro.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Entity2.png b/[core]/mercyv-garage/nui/images/cars/Entity2.png new file mode 100644 index 00000000..39f5c313 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Entity2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Entityxf.png b/[core]/mercyv-garage/nui/images/cars/Entityxf.png new file mode 100644 index 00000000..43b66a0c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Entityxf.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Esskey.png b/[core]/mercyv-garage/nui/images/cars/Esskey.png new file mode 100644 index 00000000..2b774c8a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Esskey.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Everon.png b/[core]/mercyv-garage/nui/images/cars/Everon.png new file mode 100644 index 00000000..b3a65d54 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Everon.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Exemplar.png b/[core]/mercyv-garage/nui/images/cars/Exemplar.png new file mode 100644 index 00000000..816f5ed7 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Exemplar.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/F620.png b/[core]/mercyv-garage/nui/images/cars/F620.png new file mode 100644 index 00000000..6d91279d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/F620.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Faction.png b/[core]/mercyv-garage/nui/images/cars/Faction.png new file mode 100644 index 00000000..a864833d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Faction.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Faction2.png b/[core]/mercyv-garage/nui/images/cars/Faction2.png new file mode 100644 index 00000000..66e17a7b Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Faction2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Fagaloa.png b/[core]/mercyv-garage/nui/images/cars/Fagaloa.png new file mode 100644 index 00000000..1789e2ac Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Fagaloa.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Faggio.png b/[core]/mercyv-garage/nui/images/cars/Faggio.png new file mode 100644 index 00000000..b2481178 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Faggio.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Fcr.png b/[core]/mercyv-garage/nui/images/cars/Fcr.png new file mode 100644 index 00000000..f638e017 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Fcr.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Felon.png b/[core]/mercyv-garage/nui/images/cars/Felon.png new file mode 100644 index 00000000..8b8d8c4e Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Felon.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Felon2.png b/[core]/mercyv-garage/nui/images/cars/Felon2.png new file mode 100644 index 00000000..799ab548 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Felon2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Feltzer2.png b/[core]/mercyv-garage/nui/images/cars/Feltzer2.png new file mode 100644 index 00000000..ea6fa732 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Feltzer2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Feltzer3.png b/[core]/mercyv-garage/nui/images/cars/Feltzer3.png new file mode 100644 index 00000000..f58a8323 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Feltzer3.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Flashgt.png b/[core]/mercyv-garage/nui/images/cars/Flashgt.png new file mode 100644 index 00000000..94094435 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Flashgt.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Fmj.png b/[core]/mercyv-garage/nui/images/cars/Fmj.png new file mode 100644 index 00000000..c9e7c8c9 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Fmj.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Fq2.png b/[core]/mercyv-garage/nui/images/cars/Fq2.png new file mode 100644 index 00000000..df85de20 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Fq2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Freecrawler.png b/[core]/mercyv-garage/nui/images/cars/Freecrawler.png new file mode 100644 index 00000000..4e0ad8e1 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Freecrawler.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Fugitive.png b/[core]/mercyv-garage/nui/images/cars/Fugitive.png new file mode 100644 index 00000000..966f086c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Fugitive.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Furia.png b/[core]/mercyv-garage/nui/images/cars/Furia.png new file mode 100644 index 00000000..8eba3026 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Furia.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Furoregt.png b/[core]/mercyv-garage/nui/images/cars/Furoregt.png new file mode 100644 index 00000000..798ddc59 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Furoregt.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Fusilade.png b/[core]/mercyv-garage/nui/images/cars/Fusilade.png new file mode 100644 index 00000000..1745ac43 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Fusilade.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Futo.png b/[core]/mercyv-garage/nui/images/cars/Futo.png new file mode 100644 index 00000000..f4bf9ec6 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Futo.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Gargoyle.png b/[core]/mercyv-garage/nui/images/cars/Gargoyle.png new file mode 100644 index 00000000..efbe486a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Gargoyle.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Gauntlet.png b/[core]/mercyv-garage/nui/images/cars/Gauntlet.png new file mode 100644 index 00000000..f78801fe Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Gauntlet.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Gauntlet2.png b/[core]/mercyv-garage/nui/images/cars/Gauntlet2.png new file mode 100644 index 00000000..a1159d17 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Gauntlet2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Gb200.png b/[core]/mercyv-garage/nui/images/cars/Gb200.png new file mode 100644 index 00000000..300cd813 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Gb200.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Glendale.png b/[core]/mercyv-garage/nui/images/cars/Glendale.png new file mode 100644 index 00000000..fd0154e2 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Glendale.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Glendale2.png b/[core]/mercyv-garage/nui/images/cars/Glendale2.png new file mode 100644 index 00000000..91ab46e7 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Glendale2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Gp1.png b/[core]/mercyv-garage/nui/images/cars/Gp1.png new file mode 100644 index 00000000..916b7e79 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Gp1.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Granger.png b/[core]/mercyv-garage/nui/images/cars/Granger.png new file mode 100644 index 00000000..0c61cb10 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Granger.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Gresley.png b/[core]/mercyv-garage/nui/images/cars/Gresley.png new file mode 100644 index 00000000..b899a713 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Gresley.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Gt500.png b/[core]/mercyv-garage/nui/images/cars/Gt500.png new file mode 100644 index 00000000..20891bbe Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Gt500.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Habanero.png b/[core]/mercyv-garage/nui/images/cars/Habanero.png new file mode 100644 index 00000000..64ffdbce Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Habanero.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Hakuchou.png b/[core]/mercyv-garage/nui/images/cars/Hakuchou.png new file mode 100644 index 00000000..9049a81f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Hakuchou.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Hellion.png b/[core]/mercyv-garage/nui/images/cars/Hellion.png new file mode 100644 index 00000000..e95224e3 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Hellion.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Hermes.png b/[core]/mercyv-garage/nui/images/cars/Hermes.png new file mode 100644 index 00000000..8183e519 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Hermes.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Hexer.png b/[core]/mercyv-garage/nui/images/cars/Hexer.png new file mode 100644 index 00000000..4f4924c6 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Hexer.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Hotknife.png b/[core]/mercyv-garage/nui/images/cars/Hotknife.png new file mode 100644 index 00000000..61e239eb Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Hotknife.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Hotring.png b/[core]/mercyv-garage/nui/images/cars/Hotring.png new file mode 100644 index 00000000..1b741a1a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Hotring.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Huntley.png b/[core]/mercyv-garage/nui/images/cars/Huntley.png new file mode 100644 index 00000000..7aa85114 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Huntley.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Hustler.png b/[core]/mercyv-garage/nui/images/cars/Hustler.png new file mode 100644 index 00000000..9767eae2 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Hustler.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Imorgon.png b/[core]/mercyv-garage/nui/images/cars/Imorgon.png new file mode 100644 index 00000000..584816cb Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Imorgon.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Impaler.png b/[core]/mercyv-garage/nui/images/cars/Impaler.png new file mode 100644 index 00000000..19af636a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Impaler.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Impaler2.png b/[core]/mercyv-garage/nui/images/cars/Impaler2.png new file mode 100644 index 00000000..13350e57 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Impaler2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Impaler3.png b/[core]/mercyv-garage/nui/images/cars/Impaler3.png new file mode 100644 index 00000000..bfe898b8 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Impaler3.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Impaler4.png b/[core]/mercyv-garage/nui/images/cars/Impaler4.png new file mode 100644 index 00000000..66241944 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Impaler4.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Imperator.png b/[core]/mercyv-garage/nui/images/cars/Imperator.png new file mode 100644 index 00000000..75a7114c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Imperator.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Imperator2.png b/[core]/mercyv-garage/nui/images/cars/Imperator2.png new file mode 100644 index 00000000..9d3dfd80 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Imperator2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Infernus.png b/[core]/mercyv-garage/nui/images/cars/Infernus.png new file mode 100644 index 00000000..93708078 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Infernus.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Infernus2.png b/[core]/mercyv-garage/nui/images/cars/Infernus2.png new file mode 100644 index 00000000..3de042c5 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Infernus2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Ingot.png b/[core]/mercyv-garage/nui/images/cars/Ingot.png new file mode 100644 index 00000000..7163d108 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Ingot.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Innovation.png b/[core]/mercyv-garage/nui/images/cars/Innovation.png new file mode 100644 index 00000000..a8d14fca Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Innovation.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Intruder.png b/[core]/mercyv-garage/nui/images/cars/Intruder.png new file mode 100644 index 00000000..f7d78344 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Intruder.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Issi2.png b/[core]/mercyv-garage/nui/images/cars/Issi2.png new file mode 100644 index 00000000..6f73d434 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Issi2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Issi3.png b/[core]/mercyv-garage/nui/images/cars/Issi3.png new file mode 100644 index 00000000..7804ca7a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Issi3.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Issi4.png b/[core]/mercyv-garage/nui/images/cars/Issi4.png new file mode 100644 index 00000000..8acd4ceb Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Issi4.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Issi7.png b/[core]/mercyv-garage/nui/images/cars/Issi7.png new file mode 100644 index 00000000..f4ae783c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Issi7.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Italigtb.png b/[core]/mercyv-garage/nui/images/cars/Italigtb.png new file mode 100644 index 00000000..064b70e0 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Italigtb.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Italigtb2.png b/[core]/mercyv-garage/nui/images/cars/Italigtb2.png new file mode 100644 index 00000000..5e2226ce Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Italigtb2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Italigto.png b/[core]/mercyv-garage/nui/images/cars/Italigto.png new file mode 100644 index 00000000..58e17332 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Italigto.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Jackal.png b/[core]/mercyv-garage/nui/images/cars/Jackal.png new file mode 100644 index 00000000..adcb6fed Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Jackal.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Jb700.png b/[core]/mercyv-garage/nui/images/cars/Jb700.png new file mode 100644 index 00000000..751bac3f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Jb700.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Jb7002.png b/[core]/mercyv-garage/nui/images/cars/Jb7002.png new file mode 100644 index 00000000..4deca4eb Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Jb7002.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Jester.png b/[core]/mercyv-garage/nui/images/cars/Jester.png new file mode 100644 index 00000000..946298a4 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Jester.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Jester2.png b/[core]/mercyv-garage/nui/images/cars/Jester2.png new file mode 100644 index 00000000..87c10d06 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Jester2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Jugular.png b/[core]/mercyv-garage/nui/images/cars/Jugular.png new file mode 100644 index 00000000..d15d8d85 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Jugular.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Kalahari.png b/[core]/mercyv-garage/nui/images/cars/Kalahari.png new file mode 100644 index 00000000..85d95be5 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Kalahari.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Kamacho.png b/[core]/mercyv-garage/nui/images/cars/Kamacho.png new file mode 100644 index 00000000..bd97ea8f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Kamacho.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Kanjo.png b/[core]/mercyv-garage/nui/images/cars/Kanjo.png new file mode 100644 index 00000000..9d8a8eea Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Kanjo.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Khamelion.png b/[core]/mercyv-garage/nui/images/cars/Khamelion.png new file mode 100644 index 00000000..7078435d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Khamelion.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Komoda.png b/[core]/mercyv-garage/nui/images/cars/Komoda.png new file mode 100644 index 00000000..5fde3594 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Komoda.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Krieger.png b/[core]/mercyv-garage/nui/images/cars/Krieger.png new file mode 100644 index 00000000..51c136b7 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Krieger.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Kuruma.png b/[core]/mercyv-garage/nui/images/cars/Kuruma.png new file mode 100644 index 00000000..5dbb5276 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Kuruma.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Landstalker.png b/[core]/mercyv-garage/nui/images/cars/Landstalker.png new file mode 100644 index 00000000..a0dcad73 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Landstalker.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Landstalker2.png b/[core]/mercyv-garage/nui/images/cars/Landstalker2.png new file mode 100644 index 00000000..129c9be5 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Landstalker2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Le7b.png b/[core]/mercyv-garage/nui/images/cars/Le7b.png new file mode 100644 index 00000000..61d6ad78 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Le7b.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Lectro.png b/[core]/mercyv-garage/nui/images/cars/Lectro.png new file mode 100644 index 00000000..5778f2d9 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Lectro.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Locust.png b/[core]/mercyv-garage/nui/images/cars/Locust.png new file mode 100644 index 00000000..66e57d5a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Locust.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Lurcher.png b/[core]/mercyv-garage/nui/images/cars/Lurcher.png new file mode 100644 index 00000000..ed2e59b3 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Lurcher.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Lynx.png b/[core]/mercyv-garage/nui/images/cars/Lynx.png new file mode 100644 index 00000000..5aaae99f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Lynx.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Mamba.png b/[core]/mercyv-garage/nui/images/cars/Mamba.png new file mode 100644 index 00000000..b2ac0fc2 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Mamba.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Manana.png b/[core]/mercyv-garage/nui/images/cars/Manana.png new file mode 100644 index 00000000..64007625 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Manana.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Manana2.png b/[core]/mercyv-garage/nui/images/cars/Manana2.png new file mode 100644 index 00000000..e97295e3 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Manana2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Massacro.png b/[core]/mercyv-garage/nui/images/cars/Massacro.png new file mode 100644 index 00000000..eaaf108b Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Massacro.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Massacro2.png b/[core]/mercyv-garage/nui/images/cars/Massacro2.png new file mode 100644 index 00000000..c4e4e91c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Massacro2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Michelli.png b/[core]/mercyv-garage/nui/images/cars/Michelli.png new file mode 100644 index 00000000..d280c4b9 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Michelli.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Monroe.png b/[core]/mercyv-garage/nui/images/cars/Monroe.png new file mode 100644 index 00000000..9eec4839 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Monroe.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Moonbeam.png b/[core]/mercyv-garage/nui/images/cars/Moonbeam.png new file mode 100644 index 00000000..969ca280 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Moonbeam.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Nebula.png b/[core]/mercyv-garage/nui/images/cars/Nebula.png new file mode 100644 index 00000000..4a5b9ec0 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Nebula.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Nemesis.png b/[core]/mercyv-garage/nui/images/cars/Nemesis.png new file mode 100644 index 00000000..c59fadb7 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Nemesis.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Neo.png b/[core]/mercyv-garage/nui/images/cars/Neo.png new file mode 100644 index 00000000..108f5988 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Neo.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Neon.png b/[core]/mercyv-garage/nui/images/cars/Neon.png new file mode 100644 index 00000000..0214c261 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Neon.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Nero.png b/[core]/mercyv-garage/nui/images/cars/Nero.png new file mode 100644 index 00000000..12eab663 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Nero.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Nero2.png b/[core]/mercyv-garage/nui/images/cars/Nero2.png new file mode 100644 index 00000000..c9902036 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Nero2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Nightblade.png b/[core]/mercyv-garage/nui/images/cars/Nightblade.png new file mode 100644 index 00000000..67bfe7c4 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Nightblade.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Nightshade.png b/[core]/mercyv-garage/nui/images/cars/Nightshade.png new file mode 100644 index 00000000..0efcd6f4 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Nightshade.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Ninef.png b/[core]/mercyv-garage/nui/images/cars/Ninef.png new file mode 100644 index 00000000..fa0cd5cf Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Ninef.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Ninef2.png b/[core]/mercyv-garage/nui/images/cars/Ninef2.png new file mode 100644 index 00000000..73d18d90 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Ninef2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Novak.png b/[core]/mercyv-garage/nui/images/cars/Novak.png new file mode 100644 index 00000000..0a62f0ee Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Novak.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Omnis.png b/[core]/mercyv-garage/nui/images/cars/Omnis.png new file mode 100644 index 00000000..23517f6d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Omnis.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Oppressor.png b/[core]/mercyv-garage/nui/images/cars/Oppressor.png new file mode 100644 index 00000000..a1c186ae Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Oppressor.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Oracle2.png b/[core]/mercyv-garage/nui/images/cars/Oracle2.png new file mode 100644 index 00000000..f928314f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Oracle2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Osiris.png b/[core]/mercyv-garage/nui/images/cars/Osiris.png new file mode 100644 index 00000000..e2a11f27 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Osiris.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Outlaw.png b/[core]/mercyv-garage/nui/images/cars/Outlaw.png new file mode 100644 index 00000000..0b7591e1 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Outlaw.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Panto.png b/[core]/mercyv-garage/nui/images/cars/Panto.png new file mode 100644 index 00000000..faa86236 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Panto.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Paragon.png b/[core]/mercyv-garage/nui/images/cars/Paragon.png new file mode 100644 index 00000000..c4cc7446 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Paragon.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Paragon2.png b/[core]/mercyv-garage/nui/images/cars/Paragon2.png new file mode 100644 index 00000000..a5f3a0d4 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Paragon2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Pariah.png b/[core]/mercyv-garage/nui/images/cars/Pariah.png new file mode 100644 index 00000000..51d9d34c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Pariah.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Patriot.png b/[core]/mercyv-garage/nui/images/cars/Patriot.png new file mode 100644 index 00000000..992114fb Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Patriot.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Patriot2.png b/[core]/mercyv-garage/nui/images/cars/Patriot2.png new file mode 100644 index 00000000..753f2086 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Patriot2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Pcj.png b/[core]/mercyv-garage/nui/images/cars/Pcj.png new file mode 100644 index 00000000..59707c52 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Pcj.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Penetrator.png b/[core]/mercyv-garage/nui/images/cars/Penetrator.png new file mode 100644 index 00000000..638fcdd0 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Penetrator.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Penumbra.png b/[core]/mercyv-garage/nui/images/cars/Penumbra.png new file mode 100644 index 00000000..25d65ac4 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Penumbra.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Penumbra2.png b/[core]/mercyv-garage/nui/images/cars/Penumbra2.png new file mode 100644 index 00000000..f3760406 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Penumbra2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Peyote.png b/[core]/mercyv-garage/nui/images/cars/Peyote.png new file mode 100644 index 00000000..94069903 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Peyote.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Peyote2.png b/[core]/mercyv-garage/nui/images/cars/Peyote2.png new file mode 100644 index 00000000..9e4ef149 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Peyote2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Pfister811.png b/[core]/mercyv-garage/nui/images/cars/Pfister811.png new file mode 100644 index 00000000..6036327c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Pfister811.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Phoenix.png b/[core]/mercyv-garage/nui/images/cars/Phoenix.png new file mode 100644 index 00000000..93dee990 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Phoenix.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Pigalle.png b/[core]/mercyv-garage/nui/images/cars/Pigalle.png new file mode 100644 index 00000000..44301d3a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Pigalle.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Prairie.png b/[core]/mercyv-garage/nui/images/cars/Prairie.png new file mode 100644 index 00000000..71616e27 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Prairie.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Premier.png b/[core]/mercyv-garage/nui/images/cars/Premier.png new file mode 100644 index 00000000..7bec001b Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Premier.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Primo.png b/[core]/mercyv-garage/nui/images/cars/Primo.png new file mode 100644 index 00000000..07267e39 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Primo.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Primo2.png b/[core]/mercyv-garage/nui/images/cars/Primo2.png new file mode 100644 index 00000000..0b63f5a9 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Primo2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Radi.png b/[core]/mercyv-garage/nui/images/cars/Radi.png new file mode 100644 index 00000000..3e4008cb Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Radi.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Raiden.png b/[core]/mercyv-garage/nui/images/cars/Raiden.png new file mode 100644 index 00000000..132ee3f0 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Raiden.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Rancherxl.png b/[core]/mercyv-garage/nui/images/cars/Rancherxl.png new file mode 100644 index 00000000..7546cd6a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Rancherxl.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Rapidgt.png b/[core]/mercyv-garage/nui/images/cars/Rapidgt.png new file mode 100644 index 00000000..760daccd Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Rapidgt.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Rapidgt2.png b/[core]/mercyv-garage/nui/images/cars/Rapidgt2.png new file mode 100644 index 00000000..17c46142 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Rapidgt2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Rapidgt3.png b/[core]/mercyv-garage/nui/images/cars/Rapidgt3.png new file mode 100644 index 00000000..aab51669 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Rapidgt3.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Raptor.png b/[core]/mercyv-garage/nui/images/cars/Raptor.png new file mode 100644 index 00000000..8cc1d6b7 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Raptor.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Ratbike.png b/[core]/mercyv-garage/nui/images/cars/Ratbike.png new file mode 100644 index 00000000..4b090fba Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Ratbike.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Reaper.png b/[core]/mercyv-garage/nui/images/cars/Reaper.png new file mode 100644 index 00000000..15790b3a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Reaper.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Rebel2.png b/[core]/mercyv-garage/nui/images/cars/Rebel2.png new file mode 100644 index 00000000..727c96ce Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Rebel2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Rebla.png b/[core]/mercyv-garage/nui/images/cars/Rebla.png new file mode 100644 index 00000000..8ba4f682 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Rebla.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Regina.png b/[core]/mercyv-garage/nui/images/cars/Regina.png new file mode 100644 index 00000000..3ae28afe Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Regina.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Rentalbus.png b/[core]/mercyv-garage/nui/images/cars/Rentalbus.png new file mode 100644 index 00000000..c6985785 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Rentalbus.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Retinue.png b/[core]/mercyv-garage/nui/images/cars/Retinue.png new file mode 100644 index 00000000..080dd33e Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Retinue.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Retinue2.png b/[core]/mercyv-garage/nui/images/cars/Retinue2.png new file mode 100644 index 00000000..4c10b52c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Retinue2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Revolter.png b/[core]/mercyv-garage/nui/images/cars/Revolter.png new file mode 100644 index 00000000..84100e33 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Revolter.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Rhapsody.png b/[core]/mercyv-garage/nui/images/cars/Rhapsody.png new file mode 100644 index 00000000..3b878784 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Rhapsody.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Riata.png b/[core]/mercyv-garage/nui/images/cars/Riata.png new file mode 100644 index 00000000..be8d93d5 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Riata.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Rocoto.png b/[core]/mercyv-garage/nui/images/cars/Rocoto.png new file mode 100644 index 00000000..6e6f6b98 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Rocoto.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Ruffian.png b/[core]/mercyv-garage/nui/images/cars/Ruffian.png new file mode 100644 index 00000000..3ffdf948 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Ruffian.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Ruiner2.png b/[core]/mercyv-garage/nui/images/cars/Ruiner2.png new file mode 100644 index 00000000..67899ec3 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Ruiner2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Ruston.png b/[core]/mercyv-garage/nui/images/cars/Ruston.png new file mode 100644 index 00000000..883d7b54 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Ruston.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/S80.png b/[core]/mercyv-garage/nui/images/cars/S80.png new file mode 100644 index 00000000..80cd6463 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/S80.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Sabregt.png b/[core]/mercyv-garage/nui/images/cars/Sabregt.png new file mode 100644 index 00000000..e5ec47ab Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Sabregt.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Sabregt2.png b/[core]/mercyv-garage/nui/images/cars/Sabregt2.png new file mode 100644 index 00000000..d9c485cb Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Sabregt2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Sadler.png b/[core]/mercyv-garage/nui/images/cars/Sadler.png new file mode 100644 index 00000000..364738f2 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Sadler.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Sadler2.png b/[core]/mercyv-garage/nui/images/cars/Sadler2.png new file mode 100644 index 00000000..3e1152e5 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Sadler2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Sanchez.png b/[core]/mercyv-garage/nui/images/cars/Sanchez.png new file mode 100644 index 00000000..b24e0fae Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Sanchez.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Sanctus.png b/[core]/mercyv-garage/nui/images/cars/Sanctus.png new file mode 100644 index 00000000..c84ce1da Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Sanctus.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Sandking.png b/[core]/mercyv-garage/nui/images/cars/Sandking.png new file mode 100644 index 00000000..41adc2f2 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Sandking.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Savestra.png b/[core]/mercyv-garage/nui/images/cars/Savestra.png new file mode 100644 index 00000000..7bfb5cc0 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Savestra.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Sc1.png b/[core]/mercyv-garage/nui/images/cars/Sc1.png new file mode 100644 index 00000000..f3276c95 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Sc1.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Schafter2.png b/[core]/mercyv-garage/nui/images/cars/Schafter2.png new file mode 100644 index 00000000..2f013f07 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Schafter2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Schlagen.png b/[core]/mercyv-garage/nui/images/cars/Schlagen.png new file mode 100644 index 00000000..dacc6269 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Schlagen.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Schwarzer.png b/[core]/mercyv-garage/nui/images/cars/Schwarzer.png new file mode 100644 index 00000000..1aae965a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Schwarzer.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Seminole.png b/[core]/mercyv-garage/nui/images/cars/Seminole.png new file mode 100644 index 00000000..a50218cb Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Seminole.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Sentinel2.png b/[core]/mercyv-garage/nui/images/cars/Sentinel2.png new file mode 100644 index 00000000..6bffe369 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Sentinel2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Serrano.png b/[core]/mercyv-garage/nui/images/cars/Serrano.png new file mode 100644 index 00000000..89648e0a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Serrano.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Seven70.png b/[core]/mercyv-garage/nui/images/cars/Seven70.png new file mode 100644 index 00000000..4f3be04b Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Seven70.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Shotaro.png b/[core]/mercyv-garage/nui/images/cars/Shotaro.png new file mode 100644 index 00000000..4ceacec3 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Shotaro.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Sovereign.png b/[core]/mercyv-garage/nui/images/cars/Sovereign.png new file mode 100644 index 00000000..a3211237 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Sovereign.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Specter.png b/[core]/mercyv-garage/nui/images/cars/Specter.png new file mode 100644 index 00000000..b4ba1048 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Specter.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Specter2.png b/[core]/mercyv-garage/nui/images/cars/Specter2.png new file mode 100644 index 00000000..49c85ecd Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Specter2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Stafford.png b/[core]/mercyv-garage/nui/images/cars/Stafford.png new file mode 100644 index 00000000..91051d80 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Stafford.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Stalion.png b/[core]/mercyv-garage/nui/images/cars/Stalion.png new file mode 100644 index 00000000..da6e13fd Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Stalion.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Stalion2.png b/[core]/mercyv-garage/nui/images/cars/Stalion2.png new file mode 100644 index 00000000..c38f5397 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Stalion2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Stanier.png b/[core]/mercyv-garage/nui/images/cars/Stanier.png new file mode 100644 index 00000000..67a68a86 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Stanier.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Stinger.png b/[core]/mercyv-garage/nui/images/cars/Stinger.png new file mode 100644 index 00000000..ab3159ba Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Stinger.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Stingergt.png b/[core]/mercyv-garage/nui/images/cars/Stingergt.png new file mode 100644 index 00000000..45fc718d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Stingergt.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Streiter.png b/[core]/mercyv-garage/nui/images/cars/Streiter.png new file mode 100644 index 00000000..db4b924f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Streiter.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Stretch.png b/[core]/mercyv-garage/nui/images/cars/Stretch.png new file mode 100644 index 00000000..0b160adb Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Stretch.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Stromberg.png b/[core]/mercyv-garage/nui/images/cars/Stromberg.png new file mode 100644 index 00000000..61b2dcd2 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Stromberg.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Sugoi.png b/[core]/mercyv-garage/nui/images/cars/Sugoi.png new file mode 100644 index 00000000..46ffa0a2 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Sugoi.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Sultan.png b/[core]/mercyv-garage/nui/images/cars/Sultan.png new file mode 100644 index 00000000..22769b68 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Sultan.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Sultan2.png b/[core]/mercyv-garage/nui/images/cars/Sultan2.png new file mode 100644 index 00000000..6fab0d49 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Sultan2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Sultanrs.png b/[core]/mercyv-garage/nui/images/cars/Sultanrs.png new file mode 100644 index 00000000..f68a5710 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Sultanrs.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Superd.png b/[core]/mercyv-garage/nui/images/cars/Superd.png new file mode 100644 index 00000000..acf6779f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Superd.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Surano.png b/[core]/mercyv-garage/nui/images/cars/Surano.png new file mode 100644 index 00000000..019962a6 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Surano.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Surge.png b/[core]/mercyv-garage/nui/images/cars/Surge.png new file mode 100644 index 00000000..c77c4c93 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Surge.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Swinger.png b/[core]/mercyv-garage/nui/images/cars/Swinger.png new file mode 100644 index 00000000..16000e84 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Swinger.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/T20.png b/[core]/mercyv-garage/nui/images/cars/T20.png new file mode 100644 index 00000000..e3c64270 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/T20.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Tailgater.png b/[core]/mercyv-garage/nui/images/cars/Tailgater.png new file mode 100644 index 00000000..1a793ff6 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Tailgater.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Taipan.png b/[core]/mercyv-garage/nui/images/cars/Taipan.png new file mode 100644 index 00000000..add8810a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Taipan.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Tampa.png b/[core]/mercyv-garage/nui/images/cars/Tampa.png new file mode 100644 index 00000000..48cc44ae Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Tampa.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Tempesta.png b/[core]/mercyv-garage/nui/images/cars/Tempesta.png new file mode 100644 index 00000000..d5227cea Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Tempesta.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Tezeract.png b/[core]/mercyv-garage/nui/images/cars/Tezeract.png new file mode 100644 index 00000000..f9581f4a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Tezeract.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Thrax.png b/[core]/mercyv-garage/nui/images/cars/Thrax.png new file mode 100644 index 00000000..cf4c57ad Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Thrax.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Thrust.png b/[core]/mercyv-garage/nui/images/cars/Thrust.png new file mode 100644 index 00000000..67c7b330 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Thrust.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Tigon.png b/[core]/mercyv-garage/nui/images/cars/Tigon.png new file mode 100644 index 00000000..a6848de0 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Tigon.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Torero.png b/[core]/mercyv-garage/nui/images/cars/Torero.png new file mode 100644 index 00000000..be94b4cd Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Torero.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Tornado.png b/[core]/mercyv-garage/nui/images/cars/Tornado.png new file mode 100644 index 00000000..889f2f29 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Tornado.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/Toros.png b/[core]/mercyv-garage/nui/images/cars/Toros.png new file mode 100644 index 00000000..0c67964e Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/Toros.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/cogcabri.png b/[core]/mercyv-garage/nui/images/cars/cogcabri.png new file mode 100644 index 00000000..96c476f6 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/cogcabri.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/dominator.png b/[core]/mercyv-garage/nui/images/cars/dominator.png new file mode 100644 index 00000000..c46206b9 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/dominator.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/dominator2.png b/[core]/mercyv-garage/nui/images/cars/dominator2.png new file mode 100644 index 00000000..f0779d86 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/dominator2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/dominator3.png b/[core]/mercyv-garage/nui/images/cars/dominator3.png new file mode 100644 index 00000000..cd85227d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/dominator3.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/gstsentgts2.png b/[core]/mercyv-garage/nui/images/cars/gstsentgts2.png new file mode 100644 index 00000000..223bc4c0 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/gstsentgts2.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/noimage.png b/[core]/mercyv-garage/nui/images/cars/noimage.png new file mode 100644 index 00000000..46dfad72 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/noimage.png differ diff --git a/[core]/mercyv-garage/nui/images/cars/porschepanemara.png b/[core]/mercyv-garage/nui/images/cars/porschepanemara.png new file mode 100644 index 00000000..93e1c32d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/cars/porschepanemara.png differ diff --git a/[core]/mercyv-garage/nui/images/category.png b/[core]/mercyv-garage/nui/images/category.png new file mode 100644 index 00000000..c202382e Binary files /dev/null and b/[core]/mercyv-garage/nui/images/category.png differ diff --git a/[core]/mercyv-garage/nui/images/close.png b/[core]/mercyv-garage/nui/images/close.png new file mode 100644 index 00000000..71777bb5 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/close.png differ diff --git a/[core]/mercyv-garage/nui/images/defaultimage.png b/[core]/mercyv-garage/nui/images/defaultimage.png new file mode 100644 index 00000000..3b794ce6 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/defaultimage.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/#U00d6verfl#U00f6d.png b/[core]/mercyv-garage/nui/images/logo/#U00d6verfl#U00f6d.png new file mode 100644 index 00000000..a6db9374 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/#U00d6verfl#U00f6d.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Albany.png b/[core]/mercyv-garage/nui/images/logo/Albany.png new file mode 100644 index 00000000..216ae4d1 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Albany.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Annis.png b/[core]/mercyv-garage/nui/images/logo/Annis.png new file mode 100644 index 00000000..a23af75e Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Annis.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/B#U00fcrgerfahrzeug.png b/[core]/mercyv-garage/nui/images/logo/B#U00fcrgerfahrzeug.png new file mode 100644 index 00000000..3bc6475a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/B#U00fcrgerfahrzeug.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/BF.png b/[core]/mercyv-garage/nui/images/logo/BF.png new file mode 100644 index 00000000..99d8f15d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/BF.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Benefactor.png b/[core]/mercyv-garage/nui/images/logo/Benefactor.png new file mode 100644 index 00000000..ce1efb72 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Benefactor.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Bollokan.png b/[core]/mercyv-garage/nui/images/logo/Bollokan.png new file mode 100644 index 00000000..bfe0b419 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Bollokan.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Bravado.png b/[core]/mercyv-garage/nui/images/logo/Bravado.png new file mode 100644 index 00000000..6e38f237 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Bravado.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Brute.png b/[core]/mercyv-garage/nui/images/logo/Brute.png new file mode 100644 index 00000000..4af696b5 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Brute.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Buckingham.png b/[core]/mercyv-garage/nui/images/logo/Buckingham.png new file mode 100644 index 00000000..37029a2d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Buckingham.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Canis.png b/[core]/mercyv-garage/nui/images/logo/Canis.png new file mode 100644 index 00000000..b8715529 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Canis.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Chariot.png b/[core]/mercyv-garage/nui/images/logo/Chariot.png new file mode 100644 index 00000000..02cd51fa Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Chariot.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Cheval.png b/[core]/mercyv-garage/nui/images/logo/Cheval.png new file mode 100644 index 00000000..b8b8b80d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Cheval.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Classique.png b/[core]/mercyv-garage/nui/images/logo/Classique.png new file mode 100644 index 00000000..04057f1d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Classique.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Coil.png b/[core]/mercyv-garage/nui/images/logo/Coil.png new file mode 100644 index 00000000..49ca240a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Coil.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Custom.png b/[core]/mercyv-garage/nui/images/logo/Custom.png new file mode 100644 index 00000000..b8715529 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Custom.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/DUDE-Logo.png b/[core]/mercyv-garage/nui/images/logo/DUDE-Logo.png new file mode 100644 index 00000000..a94fcbc2 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/DUDE-Logo.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Declasse.png b/[core]/mercyv-garage/nui/images/logo/Declasse.png new file mode 100644 index 00000000..193bea53 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Declasse.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Dewbauchee.png b/[core]/mercyv-garage/nui/images/logo/Dewbauchee.png new file mode 100644 index 00000000..6156dd4c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Dewbauchee.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Dinka.png b/[core]/mercyv-garage/nui/images/logo/Dinka.png new file mode 100644 index 00000000..ae0de4d9 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Dinka.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Dundreary.png b/[core]/mercyv-garage/nui/images/logo/Dundreary.png new file mode 100644 index 00000000..1fac4ce3 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Dundreary.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Emperor.png b/[core]/mercyv-garage/nui/images/logo/Emperor.png new file mode 100644 index 00000000..30d7eea3 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Emperor.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Enus.png b/[core]/mercyv-garage/nui/images/logo/Enus.png new file mode 100644 index 00000000..8603f684 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Enus.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Fathom.png b/[core]/mercyv-garage/nui/images/logo/Fathom.png new file mode 100644 index 00000000..81e634ff Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Fathom.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Gallivanter.png b/[core]/mercyv-garage/nui/images/logo/Gallivanter.png new file mode 100644 index 00000000..6d058ae0 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Gallivanter.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Grotti.png b/[core]/mercyv-garage/nui/images/logo/Grotti.png new file mode 100644 index 00000000..803eddfc Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Grotti.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/HVY.png b/[core]/mercyv-garage/nui/images/logo/HVY.png new file mode 100644 index 00000000..625eb30f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/HVY.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Hijak.png b/[core]/mercyv-garage/nui/images/logo/Hijak.png new file mode 100644 index 00000000..b3c40670 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Hijak.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Imponte.png b/[core]/mercyv-garage/nui/images/logo/Imponte.png new file mode 100644 index 00000000..62d422f6 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Imponte.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Invetero.png b/[core]/mercyv-garage/nui/images/logo/Invetero.png new file mode 100644 index 00000000..b885726a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Invetero.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Jack Sheepe.png b/[core]/mercyv-garage/nui/images/logo/Jack Sheepe.png new file mode 100644 index 00000000..5185b8ff Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Jack Sheepe.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/JackSheepe.png b/[core]/mercyv-garage/nui/images/logo/JackSheepe.png new file mode 100644 index 00000000..cac15dc5 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/JackSheepe.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Jobuilt.png b/[core]/mercyv-garage/nui/images/logo/Jobuilt.png new file mode 100644 index 00000000..7a1a0a92 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Jobuilt.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Karin.png b/[core]/mercyv-garage/nui/images/logo/Karin.png new file mode 100644 index 00000000..e16212a4 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Karin.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/LCC.png b/[core]/mercyv-garage/nui/images/logo/LCC.png new file mode 100644 index 00000000..c40c6c9a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/LCC.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/LCS.png b/[core]/mercyv-garage/nui/images/logo/LCS.png new file mode 100644 index 00000000..d0acde3c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/LCS.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Lampadati.png b/[core]/mercyv-garage/nui/images/logo/Lampadati.png new file mode 100644 index 00000000..52fd417a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Lampadati.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Liberty Chop Shop.png b/[core]/mercyv-garage/nui/images/logo/Liberty Chop Shop.png new file mode 100644 index 00000000..22e57644 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Liberty Chop Shop.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Liberty City Cycles.png b/[core]/mercyv-garage/nui/images/logo/Liberty City Cycles.png new file mode 100644 index 00000000..c5c4f6d8 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Liberty City Cycles.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/MTL.png b/[core]/mercyv-garage/nui/images/logo/MTL.png new file mode 100644 index 00000000..ccd1e48d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/MTL.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Maibatsu Corporation.png b/[core]/mercyv-garage/nui/images/logo/Maibatsu Corporation.png new file mode 100644 index 00000000..bff2249b Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Maibatsu Corporation.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Maibatsu.png b/[core]/mercyv-garage/nui/images/logo/Maibatsu.png new file mode 100644 index 00000000..b928ded0 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Maibatsu.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Mammoth.png b/[core]/mercyv-garage/nui/images/logo/Mammoth.png new file mode 100644 index 00000000..0b6d022c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Mammoth.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Maxwell.png b/[core]/mercyv-garage/nui/images/logo/Maxwell.png new file mode 100644 index 00000000..43a1f649 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Maxwell.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Nagasaki.png b/[core]/mercyv-garage/nui/images/logo/Nagasaki.png new file mode 100644 index 00000000..510fe0f2 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Nagasaki.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Obey.png b/[core]/mercyv-garage/nui/images/logo/Obey.png new file mode 100644 index 00000000..b64c1bea Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Obey.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Ocelot.png b/[core]/mercyv-garage/nui/images/logo/Ocelot.png new file mode 100644 index 00000000..167d306b Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Ocelot.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Overflod.png b/[core]/mercyv-garage/nui/images/logo/Overflod.png new file mode 100644 index 00000000..0a0e5a35 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Overflod.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Pegassi.png b/[core]/mercyv-garage/nui/images/logo/Pegassi.png new file mode 100644 index 00000000..6a1d4c91 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Pegassi.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Pfister.png b/[core]/mercyv-garage/nui/images/logo/Pfister.png new file mode 100644 index 00000000..ef66fb93 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Pfister.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Principe.png b/[core]/mercyv-garage/nui/images/logo/Principe.png new file mode 100644 index 00000000..2404d16e Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Principe.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/ProLaps.png b/[core]/mercyv-garage/nui/images/logo/ProLaps.png new file mode 100644 index 00000000..187fbd03 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/ProLaps.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Progen.png b/[core]/mercyv-garage/nui/images/logo/Progen.png new file mode 100644 index 00000000..6715be84 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Progen.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/RUNE.png b/[core]/mercyv-garage/nui/images/logo/RUNE.png new file mode 100644 index 00000000..54facf62 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/RUNE.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Schyster.png b/[core]/mercyv-garage/nui/images/logo/Schyster.png new file mode 100644 index 00000000..8aaa860c Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Schyster.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Shitzu.png b/[core]/mercyv-garage/nui/images/logo/Shitzu.png new file mode 100644 index 00000000..5b252c2a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Shitzu.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Speedophile.png b/[core]/mercyv-garage/nui/images/logo/Speedophile.png new file mode 100644 index 00000000..3dd01785 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Speedophile.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Stanley.png b/[core]/mercyv-garage/nui/images/logo/Stanley.png new file mode 100644 index 00000000..26ab099d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Stanley.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Steel Horse.png b/[core]/mercyv-garage/nui/images/logo/Steel Horse.png new file mode 100644 index 00000000..368b247f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Steel Horse.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/SteelHorse.png b/[core]/mercyv-garage/nui/images/logo/SteelHorse.png new file mode 100644 index 00000000..40e63a9f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/SteelHorse.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Truffade.png b/[core]/mercyv-garage/nui/images/logo/Truffade.png new file mode 100644 index 00000000..c09bfe2f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Truffade.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Vapid.png b/[core]/mercyv-garage/nui/images/logo/Vapid.png new file mode 100644 index 00000000..ca53a240 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Vapid.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Vulcar.png b/[core]/mercyv-garage/nui/images/logo/Vulcar.png new file mode 100644 index 00000000..b4b857a2 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Vulcar.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Vysser.png b/[core]/mercyv-garage/nui/images/logo/Vysser.png new file mode 100644 index 00000000..7cde65a5 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Vysser.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/WMC.png b/[core]/mercyv-garage/nui/images/logo/WMC.png new file mode 100644 index 00000000..3af5ed8a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/WMC.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Weeny.png b/[core]/mercyv-garage/nui/images/logo/Weeny.png new file mode 100644 index 00000000..2a60d244 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Weeny.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Western Motorcycle Company.png b/[core]/mercyv-garage/nui/images/logo/Western Motorcycle Company.png new file mode 100644 index 00000000..ab97689a Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Western Motorcycle Company.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Western.png b/[core]/mercyv-garage/nui/images/logo/Western.png new file mode 100644 index 00000000..39ea89cf Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Western.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/WesternCompany.png b/[core]/mercyv-garage/nui/images/logo/WesternCompany.png new file mode 100644 index 00000000..39ea89cf Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/WesternCompany.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Willard.png b/[core]/mercyv-garage/nui/images/logo/Willard.png new file mode 100644 index 00000000..e0b9f604 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Willard.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/Zirconium.png b/[core]/mercyv-garage/nui/images/logo/Zirconium.png new file mode 100644 index 00000000..1c4a9be8 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/Zirconium.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/ambulance.png b/[core]/mercyv-garage/nui/images/logo/ambulance.png new file mode 100644 index 00000000..6a01298d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/ambulance.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/bennys.png b/[core]/mercyv-garage/nui/images/logo/bennys.png new file mode 100644 index 00000000..fedb1c0b Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/bennys.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/bmv.png b/[core]/mercyv-garage/nui/images/logo/bmv.png new file mode 100644 index 00000000..f54326ec Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/bmv.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/ems.png b/[core]/mercyv-garage/nui/images/logo/ems.png new file mode 100644 index 00000000..6a01298d Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/ems.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/logo.png b/[core]/mercyv-garage/nui/images/logo/logo.png new file mode 100644 index 00000000..ea282444 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/logo.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/lscustom.png b/[core]/mercyv-garage/nui/images/logo/lscustom.png new file mode 100644 index 00000000..17115eb1 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/lscustom.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/lscustoms.png b/[core]/mercyv-garage/nui/images/logo/lscustoms.png new file mode 100644 index 00000000..17115eb1 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/lscustoms.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/police.png b/[core]/mercyv-garage/nui/images/logo/police.png new file mode 100644 index 00000000..b762c293 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/police.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/police2.png b/[core]/mercyv-garage/nui/images/logo/police2.png new file mode 100644 index 00000000..b762c293 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/police2.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/ubermacht.png b/[core]/mercyv-garage/nui/images/logo/ubermacht.png new file mode 100644 index 00000000..2f55db2f Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/ubermacht.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/uebermacht.png b/[core]/mercyv-garage/nui/images/logo/uebermacht.png new file mode 100644 index 00000000..6c05cba5 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/uebermacht.png differ diff --git a/[core]/mercyv-garage/nui/images/logo/unmarked.png b/[core]/mercyv-garage/nui/images/logo/unmarked.png new file mode 100644 index 00000000..980a98cd Binary files /dev/null and b/[core]/mercyv-garage/nui/images/logo/unmarked.png differ diff --git a/[core]/mercyv-garage/nui/images/rectangle.png b/[core]/mercyv-garage/nui/images/rectangle.png new file mode 100644 index 00000000..855956e0 Binary files /dev/null and b/[core]/mercyv-garage/nui/images/rectangle.png differ diff --git a/[core]/mercyv-garage/nui/index.html b/[core]/mercyv-garage/nui/index.html new file mode 100644 index 00000000..00d64de0 --- /dev/null +++ b/[core]/mercyv-garage/nui/index.html @@ -0,0 +1,319 @@ + + +
+ + +Keine Fahrzeuge
+Garage auswählen oder neue erstellen
+, or missing
. Bailing hydration and performing ' + + 'full client-side render.' + ); + } + } + // either not server-rendered, or hydration failed. + // create an empty node and replace it + oldVnode = emptyNodeAt(oldVnode); + } + + // replacing existing element + var oldElm = oldVnode.elm; + var parentElm = nodeOps.parentNode(oldElm); + + // create new node + createElm( + vnode, + insertedVnodeQueue, + // extremely rare edge case: do not insert if old element is in a + // leaving transition. Only happens when combining transition + + // keep-alive + HOCs. (#4590) + oldElm._leaveCb ? null : parentElm, + nodeOps.nextSibling(oldElm) + ); + + // update parent placeholder node element, recursively + if (isDef(vnode.parent)) { + var ancestor = vnode.parent; + var patchable = isPatchable(vnode); + while (ancestor) { + for (var i = 0; i < cbs.destroy.length; ++i) { + cbs.destroy[i](ancestor); + } + ancestor.elm = vnode.elm; + if (patchable) { + for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) { + cbs.create[i$1](emptyNode, ancestor); + } + // #6513 + // invoke insert hooks that may have been merged by create hooks. + // e.g. for directives that uses the "inserted" hook. + var insert = ancestor.data.hook.insert; + if (insert.merged) { + // start at index 1 to avoid re-invoking component mounted hook + for (var i$2 = 1; i$2 < insert.fns.length; i$2++) { + insert.fns[i$2](); + } + } + } else { + registerRef(ancestor); + } + ancestor = ancestor.parent; + } + } + + // destroy old node + if (isDef(parentElm)) { + removeVnodes([oldVnode], 0, 0); + } else if (isDef(oldVnode.tag)) { + invokeDestroyHook(oldVnode); + } + } + } + + invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch); + return vnode.elm + } + } + + /* */ + + var directives = { + create: updateDirectives, + update: updateDirectives, + destroy: function unbindDirectives (vnode) { + updateDirectives(vnode, emptyNode); + } + }; + + function updateDirectives (oldVnode, vnode) { + if (oldVnode.data.directives || vnode.data.directives) { + _update(oldVnode, vnode); + } + } + + function _update (oldVnode, vnode) { + var isCreate = oldVnode === emptyNode; + var isDestroy = vnode === emptyNode; + var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context); + var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context); + + var dirsWithInsert = []; + var dirsWithPostpatch = []; + + var key, oldDir, dir; + for (key in newDirs) { + oldDir = oldDirs[key]; + dir = newDirs[key]; + if (!oldDir) { + // new directive, bind + callHook$1(dir, 'bind', vnode, oldVnode); + if (dir.def && dir.def.inserted) { + dirsWithInsert.push(dir); + } + } else { + // existing directive, update + dir.oldValue = oldDir.value; + dir.oldArg = oldDir.arg; + callHook$1(dir, 'update', vnode, oldVnode); + if (dir.def && dir.def.componentUpdated) { + dirsWithPostpatch.push(dir); + } + } + } + + if (dirsWithInsert.length) { + var callInsert = function () { + for (var i = 0; i < dirsWithInsert.length; i++) { + callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode); + } + }; + if (isCreate) { + mergeVNodeHook(vnode, 'insert', callInsert); + } else { + callInsert(); + } + } + + if (dirsWithPostpatch.length) { + mergeVNodeHook(vnode, 'postpatch', function () { + for (var i = 0; i < dirsWithPostpatch.length; i++) { + callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode); + } + }); + } + + if (!isCreate) { + for (key in oldDirs) { + if (!newDirs[key]) { + // no longer present, unbind + callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy); + } + } + } + } + + var emptyModifiers = Object.create(null); + + function normalizeDirectives$1 ( + dirs, + vm + ) { + var res = Object.create(null); + if (!dirs) { + // $flow-disable-line + return res + } + var i, dir; + for (i = 0; i < dirs.length; i++) { + dir = dirs[i]; + if (!dir.modifiers) { + // $flow-disable-line + dir.modifiers = emptyModifiers; + } + res[getRawDirName(dir)] = dir; + dir.def = resolveAsset(vm.$options, 'directives', dir.name, true); + } + // $flow-disable-line + return res + } + + function getRawDirName (dir) { + return dir.rawName || ((dir.name) + "." + (Object.keys(dir.modifiers || {}).join('.'))) + } + + function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) { + var fn = dir.def && dir.def[hook]; + if (fn) { + try { + fn(vnode.elm, dir, vnode, oldVnode, isDestroy); + } catch (e) { + handleError(e, vnode.context, ("directive " + (dir.name) + " " + hook + " hook")); + } + } + } + + var baseModules = [ + ref, + directives + ]; + + /* */ + + function updateAttrs (oldVnode, vnode) { + var opts = vnode.componentOptions; + if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) { + return + } + if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) { + return + } + var key, cur, old; + var elm = vnode.elm; + var oldAttrs = oldVnode.data.attrs || {}; + var attrs = vnode.data.attrs || {}; + // clone observed objects, as the user probably wants to mutate it + if (isDef(attrs.__ob__)) { + attrs = vnode.data.attrs = extend({}, attrs); + } + + for (key in attrs) { + cur = attrs[key]; + old = oldAttrs[key]; + if (old !== cur) { + setAttr(elm, key, cur); + } + } + // #4391: in IE9, setting type can reset value for input[type=radio] + // #6666: IE/Edge forces progress value down to 1 before setting a max + /* istanbul ignore if */ + if ((isIE || isEdge) && attrs.value !== oldAttrs.value) { + setAttr(elm, 'value', attrs.value); + } + for (key in oldAttrs) { + if (isUndef(attrs[key])) { + if (isXlink(key)) { + elm.removeAttributeNS(xlinkNS, getXlinkProp(key)); + } else if (!isEnumeratedAttr(key)) { + elm.removeAttribute(key); + } + } + } + } + + function setAttr (el, key, value) { + if (el.tagName.indexOf('-') > -1) { + baseSetAttr(el, key, value); + } else if (isBooleanAttr(key)) { + // set attribute for blank value + // e.g. + if (isFalsyAttrValue(value)) { + el.removeAttribute(key); + } else { + // technically allowfullscreen is a boolean attribute for