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