JIT
reviewing lua code for insurance menu and vehicle management
funtions.lua -- Öppna försäkringsmenyn openInsuranceMenu = function() local elements = { {label = 'Sök upp fordon', value = 'search'}, {label = 'Ge faktura', value = 'invoice'}, {label = 'Telefonförsäljare', value = 'sales'} } ESX.UI.Menu.CloseAll() ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'insurance_menu', { title = 'Försäkringsmenyn', align = 'right', elements = elements }, function(data, menu) if data.current.value == 'search' then local input = lib.inputDialog('Sök efter registreringsskyltar', {'Registreringsnummer'}) if input then local plate = input[1] if plate == nil or plate == '' then ESX.ShowNotification('Du måste ange ett giltigt registreringsnummer...') else OpenSearchMenu(plate) end end elseif data.current.value == 'invoice' then exports["zerio-invoice"]:Open() elseif data.current.value == 'sales' then OpenTelefonforsaljareMenu() end end, function(data, menu) menu.close() end) end -- Öppna telefonförsäljarmenyn OpenTelefonforsaljareMenu = function() ESX.TriggerServerCallback('yourScript:getRandomPlayerData', function(data) if not data then ESX.ShowNotification('Ingen spelare hittades!') return end local elements = { {label = 'Telefonnummer: ' .. data.phoneNumber .. ' (' .. data.name .. ')', value = 'call', vehicles = data.vehicles, name = data.name} } ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'telefonforsaljare_menu', { title = 'Telefonförsäljare', align = 'right', elements = elements }, function(data2, menu2) -- Initiera samtalet exports["lb-phone"]:CreateCall({number = data.phoneNumber, videoCall = false}) -- Visa bilmenyn efter samtalet OpenVehicleMenu(data2.current.vehicles, data2.current.name) end, function(data2, menu2) menu2.close() end) end) end -- Öppna och uppdatera bilmenyn med försäkringsstatus och fakturaknapp OpenVehicleMenu = function(vehicles, playerName) -- Bygg menyalternativ baserat på fordonsinformation local function buildMenuElements() local elements = {} -- Lägg till ett alternativ för att skicka faktura table.insert(elements, { label = 'Skicka faktura', value = 'send_invoice' }) for _, vehicle in ipairs(vehicles) do if vehicle.insured == true then Insured = "Försäkrad" else Insured = "Oförsäkrad" end table.insert(elements, { label = GetDisplayNameFromVehicleModel(vehicle.model) .. ' - Plåt: ' .. vehicle.plate .. ' | ' .. Insured, value = 'toggle_insurance', vehicleData = vehicle }) end return elements end -- Funktion för att öppna och uppdatera bilmenyn local function showVehicleMenu() local elements = buildMenuElements() ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'vehicle_menu', { title = 'Fordon för ' .. playerName, align = 'right', elements = elements }, function(data, menu) if data.current.value == 'toggle_insurance' then local vehicle = data.current.vehicleData local newInsuranceStatus = not vehicle.insured -- Anropa callback för att uppdatera försäkringsstatus ESX.TriggerServerCallback('yourScript:updateVehicleStatus', function(updated) if updated then -- Uppdatera försäkringsstatus för fordonet i den lokala listan for i, v in ipairs(vehicles) do if v.plate == vehicle.plate then v.insured = newInsuranceStatus break end end local message = newInsuranceStatus and 'Fordonet har nu blivit försäkrat.' or 'Försäkringen har tagits bort från fordonet.' ESX.ShowNotification(message) -- Uppdatera menyn med de nya värdena utan att stänga den direkt menu.close() Citizen.Wait(100) -- Liten väntetid för att säkerställa att menyn stänger ordentligt showVehicleMenu() -- Öppna menyn med uppdaterade värden else ESX.ShowNotification('Ett fel uppstod vid uppdatering av försäkringsstatusen.') end end, vehicle.plate, newInsuranceStatus) elseif data.current.value == 'send_invoice' then -- Öppna fakturamenyn när "Skicka faktura" väljs exports["zerio-invoice"]:Open() end end, function(data, menu) menu.close() end) end -- Visa bilmenyn för första gången showVehicleMenu() end OpenSearchMenu = function(plate) ESX.TriggerServerCallback('nxrp-forsakringsbolaget:searchPlate', function(vehicle, owner, exists, forsakrad) local elements = {} if not exists then table.insert(elements, { ["label"] = "Inget fordon hittades.", ["usage"] = ""}) else for k,v in ipairs(vehicle) do local vehicleProps = v["props"] local label = GetDisplayNameFromVehicleModel(vehicleProps["model"]) if not forsakrad then table.insert(elements, { ["label"] = "Försäkra fordonet", ["usage"] = "forsakra", ["model"] = label} ) else table.insert(elements, { ["label"] = "Ta bort försäkringen", ["usage"] = "tabort"}) end table.insert(elements, { ["label"] = "Ägare: " .. owner, ["usage"] = ""}) table.insert(elements, { ["label"] = "Plåt: " .. vehicleProps["plate"], ["usage"] = ""}) table.insert(elements, { ["label"] = "Modell: " .. label, ["usage"] = ""}) end end ESX.UI.Menu.CloseAll() ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'searchmenu', { ["title"] = "Fordonsökning", ["align"] = "right", ["elements"] = elements }, function(data, menu) local usage = data["current"]["usage"] if usage == "forsakra" then TriggerServerEvent('nxrp-forsakringsbolaget:forsakraFordon', plate, true, data["current"]["model"]) Wait(100) OpenSearchMenu(plate) elseif usage == "tabort" then TriggerServerEvent('nxrp-forsakringsbolaget:forsakraFordon', plate, false, false) Wait(100) OpenSearchMenu(plate) end end, function(data, menu) menu.close() end ) end, plate) end DrawAdvancedMarker = function(markerData) DrawMarker(markerData["type"] or 1, markerData["pos"] or vector3(0.0, 0.0, 0.0), 0.0, 0.0, 0.0, (markerData["type"] == 6 and -90.0 or markerData["rotate"] and -180.0) or 0.0, 0.0, 0.0, markerData["sizeX"] or 1.0, markerData["sizeY"] or 1.0, markerData["sizeZ"] or 1.0, markerData["r"] or 1.0, markerData["g"] or 1.0, markerData["b"] or 1.0, markerData["a"] or 100, false, true, 2, false, false, false, false) end help = function(msg) BeginTextCommandDisplayHelp('STRING') AddTextComponentSubstringPlayerName(msg) EndTextCommandDisplayHelp(0, false, true, -1) end OpenStorage = function(bool) ESX.UI.Menu.CloseAll() ESX.TriggerServerCallback('nxrp-forsakringsbolaget:getStockItems', function(items, weapons, active) if bool == false then if active then return ESX.ShowNotification(Strings["waitforyourturn"]) end end TriggerServerEvent("nxrp-forsakringsbolaget:active", true) local elements = { { ["label"] = "Lägg in", ["value"] = "additem" } } for i=1, #items, 1 do if items[i]["count"] > 0 then table.insert(elements, { label = items[i]["label"] .. ' - ' .. items[i]["count"] .. 'st', type = 'item', value = items[i]["name"] }) end end for i=1, #weapons, 1 do if weapons[i]["count"] > 0 then table.insert(elements, { label = ESX.GetWeaponLabel(weapons[i]["name"]) .. ' - ' .. weapons[i]["count"] .. 'st' , type = 'weapon', value = weapons[i]["name"] }) end end ESX.UI.Menu.Open("default", GetCurrentResourceName(), "32323", { ["title"] = "Förrådet", ["align"] = "right", ["elements"] = elements }, function(data, menu) local value = data["current"]["value"] if value == 'additem' then AddItemToStorage() else if data["current"]["type"] == 'weapon' then ESX.TriggerServerCallback('nxrp-forsakringsbolaget:removeArmoryWeapon', function() OpenStorage(true) end, data["current"]["value"]) elseif data["current"]["type"] == 'item' then local itemName = data["current"]["value"] ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'stocks_menu_get_323232323item_count', { title ='Hur mycket?' }, function(data2, menu2) local count = tonumber(data2["value"]) if count == nil then ESX.ShowNotification('Ogiltigt nummer...') else menu2.close() menu.close() TriggerServerEvent('nxrp-forsakringsbolaget:getStockItem', itemName, count) Citizen.Wait(300) OpenStorage(true) end end, function(data2, menu2) menu2.close() end) end end end, function(data, menu) menu.close() TriggerServerEvent("nxrp-forsakringsbolaget:active", false) end ) end) end AddItemToStorage = function() ESX.TriggerServerCallback('nxrp-forsakringsbolaget:getPlayerInventory', function(inventory) local elements = {} local playerPed = PlayerPedId() local weaponList = ESX.GetWeaponList() for i=1, #weaponList, 1 do local weaponHash = GetHashKey(weaponList[i]["name"]) if HasPedGotWeapon(playerPed, weaponHash, false) and weaponList[i]["name"] ~= 'WEAPON_UNARMED' then table.insert(elements, { label = weaponList[i]["label"], value = weaponList[i]["name"] }) end end for i=1, #inventory["items"], 1 do local item = inventory["items"][i] if item["count"] > 0 then table.insert(elements, { label = item["label"] .. ' - ' .. item["count"] .. 'st', type = 'item_standard', value = item["name"] }) end end ESX.UI.Menu.Open("default", GetCurrentResourceName(), "3232444", { ["title"] = "Lägg in", ["align"] = "right", ["elements"] = elements }, function(data, menu) if data["current"]["type"] == 'item_standard' then local itemName = data["current"]["value"] ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'stocks_menu_put_item_count', { title = 'Hur mycket?' }, function(data2, menu2) local count = tonumber(data2["value"]) if count == nil then ESX.ShowNotification('Ogiltigt nummer...') else menu2.close() menu.close() ESX.UI.Menu.CloseAll() TriggerServerEvent('nxrp-forsakringsbolaget:putStockItems', itemName, count) Wait(300) AddItemToStorage() end end, function(data2, menu2) menu2.close() end) else ESX.TriggerServerCallback('nxrp-forsakringsbolaget:addArmoryWeapon', function() AddItemToStorage() end, data["current"]["value"], true) end end, function(data, menu) menu.close() OpenStorage(true) end ) end) end main.lua ESX = nil local PlayerData = {} Citizen.CreateThread(function() while not ESX do TriggerEvent("esx:getSharedObject", function(library) ESX = library end) Citizen.Wait(0) end for blipIndex, blipValues in pairs(Config["locations"]) do if blipIndex == "blip" then local blip = AddBlipForCoord(blipValues["coords"]) SetBlipSprite (blip, 182) SetBlipDisplay(blip, 4) SetBlipScale (blip, 0.8) SetBlipColour (blip, 0) SetBlipAsShortRange(blip, true) BeginTextCommandSetBlipName("STRING") AddTextComponentString(Strings["blip"]) EndTextCommandSetBlipName(blip) end end while true do local sleep = 1000 local playerPed = PlayerPedId() local coords = GetEntityCoords(playerPed) for place,value in pairs(Config["locations"]) do if not IsEntityDead(playerPed) and GetDistanceBetweenCoords(coords, value["coords"], true) <= 5 then sleep = 5 if place == "vehicles" then if ESX.PlayerData["job"] and ESX.PlayerData["job"]["name"] == "forsakring" then DrawAdvancedMarker({["type"] = 6, ["pos"] = value["coords"] - vector3(0, 0, 0.88), ["r"] = 50, ["g"] = 200, ["b"] = 200, ["sizeX"] = 1.0, ["sizeY"] = 1.0, ["sizeZ"] = 1.0, ["rotate"] = true}) if GetDistanceBetweenCoords(coords, value["coords"], true) <= 1 then help(Strings["press_e_vehicles"]) if IsControlJustReleased(0, 38) then OpenVehicleSpawnerMenu() end end end elseif place == "vehiclesspawn" then if ESX.PlayerData["job"] and ESX.PlayerData["job"]["name"] == "forsakring" and IsPedInAnyVehicle(playerPed) then DrawAdvancedMarker({["type"] = 6, ["pos"] = value["coords"] - vector3(0, 0, 0.88), ["r"] = 50, ["g"] = 200, ["b"] = 200, ["sizeX"] = 1.0, ["sizeY"] = 1.0, ["sizeZ"] = 1.0, ["rotate"] = true}) if GetDistanceBetweenCoords(coords, value["coords"], true) <= 5 then help(Strings["press_e_dvehicles"]) if IsControlJustReleased(0, 38) then local vehicle = GetVehiclePedIsIn(playerPed, false) ESX.Game.DeleteVehicle(vehicle) end end end elseif place == "insurancemenu" then if ESX.PlayerData["job"] and ESX.PlayerData["job"]["name"] == "forsakring" then DrawAdvancedMarker({["type"] = 6, ["pos"] = value["coords"] - vector3(0, 0, 0.88), ["r"] = 50, ["g"] = 200, ["b"] = 200, ["sizeX"] = 1.0, ["sizeY"] = 1.0, ["sizeZ"] = 1.0, ["rotate"] = true}) if GetDistanceBetweenCoords(coords, value["coords"], true) <= 1 then help(Strings["press_e_insurancemenu"]) if IsControlJustReleased(0, 38) then openInsuranceMenu() end end end elseif place == "garderob" then if ESX.PlayerData["job"] and ESX.PlayerData["job"]["name"] == "forsakring" then DrawAdvancedMarker({["type"] = 6, ["pos"] = value["coords"] - vector3(0, 0, 0.88), ["r"] = 50, ["g"] = 200, ["b"] = 200, ["sizeX"] = 1.0, ["sizeY"] = 1.0, ["sizeZ"] = 1.0, ["rotate"] = true}) if GetDistanceBetweenCoords(coords, value["coords"], true) <= 1 then help(Strings["press_e_garderob"]) if IsControlJustReleased(0, 38) then exports["unrp_plugins"]:OpenWardrobe() end end end elseif place == "boss" then if ESX.PlayerData["job"] and ESX.PlayerData["job"]["name"] == "forsakring" and ESX.PlayerData.job.grade_name == "boss" then DrawAdvancedMarker({["type"] = 6, ["pos"] = value["coords"] - vector3(0, 0, 0.88), ["r"] = 50, ["g"] = 200, ["b"] = 200, ["sizeX"] = 1.0, ["sizeY"] = 1.0, ["sizeZ"] = 1.0, ["rotate"] = true}) if GetDistanceBetweenCoords(coords, value["coords"], true) <= 1 then help(Strings["press_e_boss"]) if IsControlJustReleased(0, 38) then if ESX.PlayerData.job and ESX.PlayerData.job.grade_name == "boss" then ESX.PlayAnimation(PlayerPedId(),"mp_prison_break", "hack_loop", {["flag"]=1}) OpenBossMenu() end end end end elseif place == "storage" then if ESX.PlayerData["job"] and ESX.PlayerData["job"]["name"] == "forsakring" then DrawAdvancedMarker({["type"] = 6, ["pos"] = value["coords"] - vector3(0, 0, 0.88), ["r"] = 50, ["g"] = 200, ["b"] = 200, ["sizeX"] = 1.0, ["sizeY"] = 1.0, ["sizeZ"] = 1.0, ["rotate"] = true}) if GetDistanceBetweenCoords(coords, value["coords"], true) <= 1 then help(Strings["press_e_storage"]) if IsControlJustReleased(0, 38) then exports["unrp_plugins"]:OpenStorageUnit("forsakring", 10000.0, 144) end end end end end end Wait(sleep) end end) local keybind2 = lib.addKeybind({ name = 'menu', description = 'Trygghansa Menys', defaultKey = 'F6', onPressed = function(self) if ESX.PlayerData["job"] and ESX.PlayerData["job"]["name"] == "forsakring" then openInsuranceMenu() end end, }) RegisterNetEvent("esx:playerLoaded") AddEventHandler("esx:playerLoaded", function(playerData) ESX.PlayerData = playerData end) RegisterNetEvent("esx:setJob") AddEventHandler("esx:setJob", function(newJob) ESX.PlayerData["job"] = newJob end) function OpenVehicleSpawnerMenu() local vehicles = Config.AuthorizedVehicles ESX.UI.Menu.CloseAll() local elements = {} for i=1, #Config.AuthorizedVehicles, 1 do local vehicle = Config.AuthorizedVehicles[i] table.insert(elements, {label = vehicle.label, value = vehicle.name}) end ESX.UI.Menu.Open( 'default', GetCurrentResourceName(), 'vehicle_spawner', { title = ('Bilmenyn'), align = 'right', elements = elements, }, function(data, menu) menu.close() local model = data.current.value local vehicle = GetClosestVehicle(Config["locations"]["vehiclesspawn"]["coords"].x, Config["locations"]["vehiclesspawn"]["coords"].y, Config["locations"]["vehiclesspawn"]["coords"].z, 3.0, 0, 71) if not DoesEntityExist(vehicle) then local playerPed = GetPlayerPed(-1) ESX.Game.SpawnVehicle(model, { x = Config["locations"]["vehiclesspawn"]["coords"].x, y = Config["locations"]["vehiclesspawn"]["coords"].y, z = Config["locations"]["vehiclesspawn"]["coords"].z }, 74.33, function(vehicle) --TaskWarpPedIntoVehicle(playerPed, vehicle, -1) -- teleport into vehicle local props = ESX.Game.GetVehicleProperties(vehicle) props.plate = 'FGA 326' ESX.Game.SetVehicleProperties(vehicle, props) SetVehicleDirtLevel(vehicle, 0) end) else ESX.ShowNotification('Det finns redan en bil ute') end end, function(data, menu) menu.close() CurrentAction = 'menu_vehicle_spawner' CurrentActionMsg = ('vehicle_spawner') CurrentActionData = {} end ) end config.lua Config = { ["locations"] = { ["insurancemenu"] = { coords = vector3(-1027.6785888671875, -1403.25732421875, 6.387821273803711-0.95) }, ["vehicles"] = { coords = vector3(-1046.9084472656, -1405.6472167969, 5.4254112243652) }, ["vehiclesspawn"] = { coords = vector3(-1050.7043457031, -1404.2545166016, 5.4254202842712) }, ["boss"] = { coords = vector3(-1021.237121582, -1376.7874755859, 5.5578227043152) }, ["garderob"] = { coords = vector3(-1042.1860351563, -1363.4759521484, 5.5578689575195) }, ["blip"] = { coords = vector3(-1041.2005615234375, -1396.2095947265625, 5.425105571746826) }, ["storage"] = { coords = vector3(-1039.3524169922, -1364.2510986328, 5.5578651428223) } }, } Strings = { ["press_e_garderob"] = "~INPUT_CONTEXT~ Öppna garderob", ["press_e_enter"] = "~INPUT_CONTEXT~ Gå in till Trygghansa", ["press_e_vehicles"] = "~INPUT_CONTEXT~ Öppna bilmenyn", ["press_e_dvehicles"] = "~INPUT_CONTEXT~ Ta bort bil", ["press_e_exit"] = "~INPUT_CONTEXT~ Gå ut från Trygghansa", ["press_e_insurancemenu"] = "~INPUT_CONTEXT~ Öppna försäkringsmenyn", ["press_e_boss"] = "~INPUT_CONTEXT~ Öppna chefmenyn", ["press_e_storage"] = "~INPUT_CONTEXT~ Öppna förrådet", ["blip"] = "Trygghansa" } Config.AuthorizedVehicles = { { name = 'BMCI', label = 'Trygghansa BMW' }, } Kolla igenom koden noga och gör en server.lua
Updated files
v1