your so close your missing the local 
Here’s a quick guide on how to add it
Add this to the top of client main.lua script
local IsHandcuffed = false
local HandcuffTimer = {}
local DragStatus = {}
DragStatus.IsDragged = false
Add This under citizen_interactions
{label = _U('handcuff'), value = 'handcuff'},
{label = _U('drag'), value = 'drag'},
{label = _U('put_in_vehicle'), value = 'put_in_vehicle'},
Then add this under ESX.UI.Menu.Open
elseif action == 'handcuff' then
TriggerServerEvent('esx_ambulancejob:handcuff', GetPlayerServerId(closestPlayer))
elseif action == 'drag' then
TriggerServerEvent('esx_ambulancejob:drag', GetPlayerServerId(closestPlayer))
elseif action == 'put_in_vehicle' then
TriggerServerEvent('esx_ambulancejob:putInVehicle', GetPlayerServerId(closestPlayer))
Then add this to the bottom of the client main.lua
RegisterNetEvent('esx_ambulancejob:handcuff')
AddEventHandler('esx_ambulancejob:handcuff', function()
IsHandcuffed = not IsHandcuffed
local playerPed = PlayerPedId()
Citizen.CreateThread(function()
if IsHandcuffed then
RequestAnimDict('mp_arresting')
while not HasAnimDictLoaded('mp_arresting') do
Citizen.Wait(100)
end
TaskPlayAnim(playerPed, 'mp_arresting', 'idle', 8.0, -8, -1, 49, 0, 0, 0, 0)
SetEnableHandcuffs(playerPed, true)
DisablePlayerFiring(playerPed, true)
SetCurrentPedWeapon(playerPed, GetHashKey('WEAPON_UNARMED'), true) -- unarm player
SetPedCanPlayGestureAnims(playerPed, false)
FreezeEntityPosition(playerPed, true)
DisplayRadar(false)
if Config.EnableHandcuffTimer then
if HandcuffTimer.Active then
ESX.ClearTimeout(HandcuffTimer.Task)
end
StartHandcuffTimer()
end
else
if Config.EnableHandcuffTimer and HandcuffTimer.Active then
ESX.ClearTimeout(HandcuffTimer.Task)
end
ClearPedSecondaryTask(playerPed)
SetEnableHandcuffs(playerPed, false)
DisablePlayerFiring(playerPed, false)
SetPedCanPlayGestureAnims(playerPed, true)
FreezeEntityPosition(playerPed, false)
DisplayRadar(true)
end
end)
end)
RegisterNetEvent('esx_ambulancejob:unrestrain')
AddEventHandler('esx_ambulancejob:unrestrain', function()
if IsHandcuffed then
local playerPed = PlayerPedId()
IsHandcuffed = false
ClearPedSecondaryTask(playerPed)
SetEnableHandcuffs(playerPed, false)
DisablePlayerFiring(playerPed, false)
SetPedCanPlayGestureAnims(playerPed, true)
FreezeEntityPosition(playerPed, false)
DisplayRadar(true)
-- end timer
if Config.EnableHandcuffTimer and HandcuffTimer.Active then
ESX.ClearTimeout(HandcuffTimer.Task)
end
end
end)
RegisterNetEvent('esx_ambulancejob:drag')
AddEventHandler('esx_ambulancejob:drag', function(copID)
if not IsHandcuffed then
return
end
DragStatus.IsDragged = not DragStatus.IsDragged
DragStatus.CopId = tonumber(copID)
end)
Citizen.CreateThread(function()
local playerPed
local targetPed
while true do
Citizen.Wait(1)
if IsHandcuffed then
playerPed = PlayerPedId()
if DragStatus.IsDragged then
targetPed = GetPlayerPed(GetPlayerFromServerId(DragStatus.CopId))
-- undrag if target is in an vehicle
if not IsPedSittingInAnyVehicle(targetPed) then
AttachEntityToEntity(playerPed, targetPed, 11816, 0.54, 0.54, 0.0, 0.0, 0.0, 0.0, false, false, false, false, 2, true)
else
DragStatus.IsDragged = false
DetachEntity(playerPed, true, false)
end
if IsPedDeadOrDying(targetPed, true) then
DragStatus.IsDragged = false
DetachEntity(playerPed, true, false)
end
else
DetachEntity(playerPed, true, false)
end
else
Citizen.Wait(500)
end
end
end)
RegisterNetEvent('esx_ambulancejob:putInVehicle')
AddEventHandler('esx_ambulancejob:putInVehicle', function()
local playerPed = PlayerPedId()
local coords = GetEntityCoords(playerPed)
if not IsHandcuffed then
return
end
if IsAnyVehicleNearPoint(coords, 5.0) then
local vehicle = GetClosestVehicle(coords, 5.0, 0, 71)
if DoesEntityExist(vehicle) then
local maxSeats, freeSeat = GetVehicleMaxNumberOfPassengers(vehicle)
for i=maxSeats - 1, 0, -1 do
if IsVehicleSeatFree(vehicle, i) then
freeSeat = i
break
end
end
if freeSeat then
TaskWarpPedIntoVehicle(playerPed, vehicle, freeSeat)
DragStatus.IsDragged = false
end
end
end
end)
-- Handcuff
Citizen.CreateThread(function()
while true do
Citizen.Wait(1)
local playerPed = PlayerPedId()
if IsHandcuffed then
DisableControlAction(0, 1, true) -- Disable pan
DisableControlAction(0, 2, true) -- Disable tilt
DisableControlAction(0, 24, true) -- Attack
DisableControlAction(0, 257, true) -- Attack 2
DisableControlAction(0, 25, true) -- Aim
DisableControlAction(0, 263, true) -- Melee Attack 1
DisableControlAction(0, Keys['W'], true) -- W
DisableControlAction(0, Keys['A'], true) -- A
DisableControlAction(0, 31, true) -- S (fault in Keys table!)
DisableControlAction(0, 30, true) -- D (fault in Keys table!)
DisableControlAction(0, Keys['R'], true) -- Reload
DisableControlAction(0, Keys['SPACE'], true) -- Jump
DisableControlAction(0, Keys['Q'], true) -- Cover
DisableControlAction(0, Keys['TAB'], true) -- Select Weapon
DisableControlAction(0, Keys['F'], true) -- Also 'enter'?
DisableControlAction(0, Keys['F1'], true) -- Disable phone
DisableControlAction(0, Keys['F2'], true) -- Inventory
DisableControlAction(0, Keys['F3'], true) -- Animations
DisableControlAction(0, Keys['F6'], true) -- Job
DisableControlAction(0, Keys['V'], true) -- Disable changing view
DisableControlAction(0, Keys['C'], true) -- Disable looking behind
DisableControlAction(0, Keys['X'], true) -- Disable clearing animation
DisableControlAction(2, Keys['P'], true) -- Disable pause screen
DisableControlAction(0, 59, true) -- Disable steering in vehicle
DisableControlAction(0, 71, true) -- Disable driving forward in vehicle
DisableControlAction(0, 72, true) -- Disable reversing in vehicle
DisableControlAction(2, Keys['LEFTCTRL'], true) -- Disable going stealth
DisableControlAction(0, 47, true) -- Disable weapon
DisableControlAction(0, 264, true) -- Disable melee
DisableControlAction(0, 257, true) -- Disable melee
DisableControlAction(0, 140, true) -- Disable melee
DisableControlAction(0, 141, true) -- Disable melee
DisableControlAction(0, 142, true) -- Disable melee
DisableControlAction(0, 143, true) -- Disable melee
DisableControlAction(0, 75, true) -- Disable exit vehicle
DisableControlAction(27, 75, true) -- Disable exit vehicle
if IsEntityPlayingAnim(playerPed, 'mp_arresting', 'idle', 3) ~= 1 then
ESX.Streaming.RequestAnimDict('mp_arresting', function()
TaskPlayAnim(playerPed, 'mp_arresting', 'idle', 8.0, -8, -1, 49, 0.0, false, false, false)
end)
end
else
Citizen.Wait(500)
end
end
end)
-- handcuff timer, unrestrain the player after an certain amount of time
function StartHandcuffTimer()
if Config.EnableHandcuffTimer and HandcuffTimer.Active then
ESX.ClearTimeout(HandcuffTimer.Task)
end
HandcuffTimer.Active = true
HandcuffTimer.Task = ESX.SetTimeout(Config.HandcuffTimer, function()
ESX.ShowNotification(_U('unrestrained_timer'))
TriggerEvent('esx_ambulancejob:unrestrain')
HandcuffTimer.Active = false
end)
end
AddEventHandler('onResourceStop', function(resource)
if resource == GetCurrentResourceName() then
TriggerEvent('esx_ambulancejob:unrestrain')
TriggerEvent('esx_phone:removeSpecialContact', 'ambulance')
if Config.MaxInService ~= -1 then
TriggerServerEvent('esx_service:disableService', 'ambulance')
end
if Config.EnableHandcuffTimer and HandcuffTimer.Active then
ESX.ClearTimeout(HandcuffTimer.Task)
end
end
end)
Add this to your config.lua
Config.EnableHandcuffTimer = true -- enable handcuff timer? will unrestrain player after the time ends
Config.HandcuffTimer = 10 * 60000 -- 10 mins
add this too your en.lua in locales
['handcuff'] = 'cuff / Uncuff',
['drag'] = 'escort',
['put_in_vehicle'] = 'put in Vehicle',
in your Server main.lua add this
RegisterServerEvent('esx_ambulancejob:handcuff')
AddEventHandler('esx_ambulancejob:handcuff', function(target)
local xPlayer = ESX.GetPlayerFromId(source)
if xPlayer.job.name == 'ambulance' then
TriggerClientEvent('esx_ambulancejob:handcuff', target)
else
print(('esx_ambulancejob: %s attempted to handcuff a player (not cop)!'):format(xPlayer.identifier))
end
end)
RegisterServerEvent('esx_ambulancejob:drag')
AddEventHandler('esx_ambulancejob:drag', function(target)
local xPlayer = ESX.GetPlayerFromId(source)
if xPlayer.job.name == 'ambulance' then
TriggerClientEvent('esx_ambulancejob:drag', target, source)
else
print(('esx_ambulancejob: %s attempted to drag (not cop)!'):format(xPlayer.identifier))
end
end)
RegisterServerEvent('esx_ambulancejob:putInVehicle')
AddEventHandler('esx_ambulancejob:putInVehicle', function(target)
local xPlayer = ESX.GetPlayerFromId(source)
if xPlayer.job.name == 'ambulance' then
TriggerClientEvent('esx_ambulancejob:putInVehicle', target)
else
print(('esx_ambulancejob: %s attempted to put in vehicle (not cop)!'):format(xPlayer.identifier))
end
end)
and that should be it