JIT
creating an ems job menu for your lua script
-- Add this to your main.lua or create a new file called job_menu.lua local function openJobMenu() -- Check if player has EMS job if not hasJob(cache.serverId, Config.EmsJobs) then return end -- Check if player is dead if player.isDead then return end local options = { { title = 'Diagnose Patient', description = 'Check patient injuries and status', icon = 'stethoscope', arrow = false, onSelect = function() local closestPlayer = lib.getClosestPlayer(GetEntityCoords(cache.ped), 3.0) if not closestPlayer then return utils.showNotification("No patient nearby") end local data = lib.callback.await('atrp_ambulancejob:getData', false, GetPlayerServerId(closestPlayer)) checkInjuries({ injuries = data.injuries, target = GetPlayerServerId(closestPlayer) }) end }, { title = 'Revive Patient', description = 'Revive nearby unconscious patient', icon = 'kit-medical', arrow = false, onSelect = function() local closestPlayer = lib.getClosestPlayer(GetEntityCoords(cache.ped), 3.0) if not closestPlayer then return utils.showNotification("No patient nearby") end local targetPed = GetPlayerPed(closestPlayer) local targetServerId = GetPlayerServerId(closestPlayer) -- Check if defibrillator is needed if not exports.ox_inventory:Search('count', 'defibrillator') then return utils.showNotification(locale("not_enough_defibrillator")) end if lib.progressBar({ duration = 15000, label = locale("reviving_patient"), useWhileDead = false, canCancel = true, disable = { car = true, move = true }, anim = { scenario = "CODE_HUMAN_MEDIC_TEND_TO_DEAD" } }) then local dataToSend = {} dataToSend.targetServerId = targetServerId TriggerServerEvent("atrp_ambulancejob:revivePlayer", dataToSend) -- Use defibrillator utils.useItem("defibrillator", Config.ConsumeItemPerUse) end end }, { title = 'Heal Patient', description = 'Heal patient injuries', icon = 'bandage', arrow = false, onSelect = function() local closestPlayer = lib.getClosestPlayer(GetEntityCoords(cache.ped), 3.0) if not closestPlayer then return utils.showNotification("No patient nearby") end local targetServerId = GetPlayerServerId(closestPlayer) if lib.progressBar({ duration = 8000, label = "Healing patient", useWhileDead = false, canCancel = true, disable = { car = true, move = true }, anim = { scenario = "CODE_HUMAN_MEDIC_TEND_TO_DEAD" } }) then local dataToSend = {} dataToSend.targetServerId = targetServerId TriggerServerEvent("atrp_ambulancejob:healPlayer", dataToSend) end end }, { title = 'Stretcher Controls', description = 'Deploy or manage stretchers', icon = 'bed', arrow = false, onSelect = function() local playerCoords = GetEntityCoords(cache.ped) local vehicle = lib.getClosestVehicle(playerCoords, 5.0) if vehicle and isEmsVehicle(vehicle) then if usingStretcher then -- Put stretcher in vehicle if Entity(vehicle).state.stretcher >= Config.AmbulanceStretchers then return utils.showNotification(locale("stretcher_limit_reached")) end Entity(vehicle).state.stretcher += 1 toggleStretcher(false) else -- Take stretcher from vehicle if not Entity(vehicle).state.stretcher then Entity(vehicle).state.stretcher = Config.AmbulanceStretchers end if Entity(vehicle).state.stretcher < 1 then return utils.showNotification(locale("no_stretcher_found")) end toggleStretcher(true) Entity(vehicle).state.stretcher -= 1 end else utils.showNotification("No ambulance nearby") end end }, { title = 'Patient Transport', description = 'Put patient in/out of vehicle', icon = 'car', arrow = false, onSelect = function() local closestPlayer = lib.getClosestPlayer(GetEntityCoords(cache.ped), 3.0) local vehicle = lib.getClosestVehicle(GetEntityCoords(cache.ped), 5.0) if not closestPlayer then return utils.showNotification("No patient nearby") end if not vehicle or not isEmsVehicle(vehicle) then return utils.showNotification("No ambulance nearby") end local targetPed = GetPlayerPed(closestPlayer) local targetServerId = GetPlayerServerId(closestPlayer) if IsPedInAnyVehicle(targetPed, false) then -- Remove from vehicle local dataToSend = {} dataToSend.target = targetServerId TriggerServerEvent('atrp_ambulancejob:togglePatientFromVehicle', dataToSend) else -- Put in vehicle local dataToSend = {} dataToSend.vehicle = NetworkGetNetworkIdFromEntity(vehicle) dataToSend.target = targetServerId TriggerServerEvent('atrp_ambulancejob:togglePatientFromVehicle', dataToSend) end end } } lib.registerContext({ id = 'ems_job_menu', title = 'EMS Job Menu', options = options }) lib.showContext('ems_job_menu') end -- Register radial menu lib.registerRadial({ id = 'ems_menu', items = { { label = 'Diagnose', icon = 'stethoscope', onSelect = function() local closestPlayer = lib.getClosestPlayer(GetEntityCoords(cache.ped), 3.0) if not closestPlayer then return utils.showNotification("No patient nearby") end local data = lib.callback.await('atrp_ambulancejob:getData', false, GetPlayerServerId(closestPlayer)) checkInjuries({ injuries = data.injuries, target = GetPlayerServerId(closestPlayer) }) end }, { label = 'Revive', icon = 'heartbeat', onSelect = function() local closestPlayer = lib.getClosestPlayer(GetEntityCoords(cache.ped), 3.0) if not closestPlayer then return utils.showNotification("No patient nearby") end local targetServerId = GetPlayerServerId(closestPlayer) if not exports.ox_inventory:Search('count', 'defibrillator') then return utils.showNotification(locale("not_enough_defibrillator")) end if lib.progressBar({ duration = 15000, label = locale("reviving_patient"), useWhileDead = false, canCancel = true, disable = { car = true, move = true }, anim = { scenario = "CODE_HUMAN_MEDIC_TEND_TO_DEAD" } }) then local dataToSend = { targetServerId = targetServerId } TriggerServerEvent("atrp_ambulancejob:revivePlayer", dataToSend) utils.useItem("defibrillator", Config.ConsumeItemPerUse) end end }, { label = 'Heal', icon = 'band-aid', onSelect = function() local closestPlayer = lib.getClosestPlayer(GetEntityCoords(cache.ped), 3.0) if not closestPlayer then return utils.showNotification("No patient nearby") end local targetServerId = GetPlayerServerId(closestPlayer) if lib.progressBar({ duration = 8000, label = "Healing patient", useWhileDead = false, canCancel = true, disable = { car = true, move = true }, anim = { scenario = "CODE_HUMAN_MEDIC_TEND_TO_DEAD" } }) then local dataToSend = { targetServerId = targetServerId } TriggerServerEvent("atrp_ambulancejob:healPlayer", dataToSend) end end }, { label = 'Stretcher', icon = 'bed-empty', onSelect = function() local playerCoords = GetEntityCoords(cache.ped) local vehicle = lib.getClosestVehicle(playerCoords, 5.0) if vehicle and isEmsVehicle(vehicle) then if usingStretcher then if Entity(vehicle).state.stretcher >= Config.AmbulanceStretchers then return utils.showNotification(locale("stretcher_limit_reached")) end Entity(vehicle).state.stretcher += 1 toggleStretcher(false) else if not Entity(vehicle).state.stretcher then Entity(vehicle).state.stretcher = Config.AmbulanceStretchers end if Entity(vehicle).state.stretcher < 1 then return utils.showNotification(locale("no_stretcher_found")) end toggleStretcher(true) Entity(vehicle).state.stretcher -= 1 end else utils.showNotification("No ambulance nearby") end end }, { label = 'Transport', icon = 'door-open', onSelect = function() local closestPlayer = lib.getClosestPlayer(GetEntityCoords(cache.ped), 3.0) local vehicle = lib.getClosestVehicle(GetEntityCoords(cache.ped), 5.0) if not closestPlayer then return utils.showNotification("No patient nearby") end if not vehicle or not isEmsVehicle(vehicle) then return utils.showNotification("No ambulance nearby") end local targetPed = GetPlayerPed(closestPlayer) local targetServerId = GetPlayerServerId(closestPlayer) local dataToSend = { target = targetServerId } if not IsPedInAnyVehicle(targetPed, false) then dataToSend.vehicle = NetworkGetNetworkIdFromEntity(vehicle) end TriggerServerEvent('atrp_ambulancejob:togglePatientFromVehicle', dataToSend) end } } }) -- Enhanced target options for players addGlobalPlayer({ { name = 'atrp_ambulancejob_diagnose', icon = 'fa-solid fa-stethoscope', label = locale('check_patient'), groups = Config.EmsJobs, distance = 3, fn = function(data) local target = type(data) == "number" and data or GetPlayerServerId(NetworkGetPlayerIndexFromPed(data.entity)) local callbackData = lib.callback.await('atrp_ambulancejob:getData', false, target) checkInjuries({ injuries = callbackData.injuries, target = target }) end }, { name = 'atrp_ambulancejob_revive_target', icon = 'fa-solid fa-heartbeat', label = locale('revive_patient'), groups = Config.EmsJobs, distance = 3, fn = function(data) local target = type(data) == "number" and data or GetPlayerServerId(NetworkGetPlayerIndexFromPed(data.entity)) if not exports.ox_inventory:Search('count', 'defibrillator') then return utils.showNotification(locale("not_enough_defibrillator")) end if lib.progressBar({ duration = 15000, label = locale("reviving_patient"), useWhileDead = false, canCancel = true, disable = { car = true, move = true }, anim = { scenario = "CODE_HUMAN_MEDIC_TEND_TO_DEAD" } }) then local dataToSend = { targetServerId = target } TriggerServerEvent("atrp_ambulancejob:revivePlayer", dataToSend) utils.useItem("defibrillator", Config.ConsumeItemPerUse) end end }, { name = 'atrp_ambulancejob_heal_target', icon = 'fa-solid fa-bandage', label = 'Heal Patient', groups = Config.EmsJobs, distance = 3, fn = function(data) local target = type(data) == "number" and data or GetPlayerServerId(NetworkGetPlayerIndexFromPed(data.entity)) if lib.progressBar({ duration = 8000, label = "Healing patient", useWhileDead = false, canCancel = true, disable = { car = true, move = true }, anim = { scenario = "CODE_HUMAN_MEDIC_TEND_TO_DEAD" } }) then local dataToSend = { targetServerId = target } TriggerServerEvent("atrp_ambulancejob:healPlayer", dataToSend) end end }, { name = 'atrp_ambulancejob_stretcher_patient', icon = 'fa-solid fa-bed', label = locale('put_on_stretcher'), groups = Config.EmsJobs, distance = 3, canInteract = function(entity, distance, coords, name) local closestStretcher = GetClosestObjectOfType(coords.x, coords.y, coords.z, 3.0, `prop_ld_binbag_01`, false) return DoesEntityExist(closestStretcher) end, fn = function(data) local targetPed = type(data) == "number" and GetPlayerPed(data) or data.entity putOnStretcher(true, targetPed) end } }) -- Command to open job menu RegisterCommand('emsmenu', function() if hasJob(cache.serverId, Config.EmsJobs) then openJobMenu() else utils.showNotification("You are not an EMS worker") end end) -- Keymapping for radial menu (optional) RegisterCommand('+emsradial', function() if hasJob(cache.serverId, Config.EmsJobs) then lib.showRadial('ems_menu') end end) RegisterCommand('-emsradial', function() lib.hideRadial() end) -- Optional: Register keybind RegisterKeyMapping('+emsradial', 'Open EMS Radial Menu', 'keyboard', 'F6') Fixa så man it gör kommando man tryvker f6 för och öppna menyn sen kolla så den har jobbet eller så esx loaded esx has job eller hur det är med sen lägg esx nyaste export längst uppe
Updated files
v1
^1SCRIPT ERROR: @ox_lib/init.lua:89: No such export showRadial in resource ox_lib^7
Updated files
v2