-- 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