The paired animation is not something that is just plug and play… you need to code it to send the commands to play the animations to both ped’s at the same time or it will not look right. i am working up a example code on how this is done and will post here in a few mins. This will be a example code only… you will have to figure out how to plug it into your existing police script to get it to work for your server.
client script
ESX = nil
cuffed = false
Citizen.CreateThread(function()
while ESX == nil do
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
Citizen.Wait(0)
end
while ESX.GetPlayerData().job == nil do
Citizen.Wait(10)
end
ESX.PlayerData = ESX.GetPlayerData()
end)
RegisterNetEvent('esx_policejob:getarrested')
AddEventHandler('esx_policejob:getarrested', function(playerheading, playercoords, playerlocation)
playerPed = GetPlayerPed(-1)
SetCurrentPedWeapon(playerPed, GetHashKey('WEAPON_UNARMED'), true) -- unarm player
local x, y, z = table.unpack(playercoords + playerlocation * 1.0)
SetEntityCoords(GetPlayerPed(-1), x, y, z)
SetEntityHeading(GetPlayerPed(-1), playerheading)
Citizen.Wait(250)
loadanimdict('mp_arrest_paired')
TaskPlayAnim(GetPlayerPed(-1), 'mp_arrest_paired', 'crook_p2_back_right', 8.0, -8, 3750 , 2, 0, 0, 0, 0)
Citizen.Wait(3760)
cuffed = true
loadanimdict('mp_arresting')
TaskPlayAnim(GetPlayerPed(-1), 'mp_arresting', 'idle', 8.0, -8, -1, 49, 0.0, false, false, false)
end)
RegisterNetEvent('esx_policejob:doarrested')
AddEventHandler('esx_policejob:doarrested', function()
Citizen.Wait(250)
loadanimdict('mp_arrest_paired')
TaskPlayAnim(GetPlayerPed(-1), 'mp_arrest_paired', 'cop_p2_back_right', 8.0, -8,3750, 2, 0, 0, 0, 0)
Citizen.Wait(3000)
end)
RegisterNetEvent('esx_policejob:douncuffing')
AddEventHandler('esx_policejob:douncuffing', function()
Citizen.Wait(250)
loadanimdict('mp_arresting')
TaskPlayAnim(GetPlayerPed(-1), 'mp_arresting', 'a_uncuff', 8.0, -8,-1, 2, 0, 0, 0, 0)
Citizen.Wait(5500)
ClearPedTasks(GetPlayerPed(-1))
end)
RegisterNetEvent('esx_policejob:getuncuffed')
AddEventHandler('esx_policejob:getuncuffed', function(playerheading, playercoords, playerlocation)
local x, y, z = table.unpack(playercoords + playerlocation * 1.0)
SetEntityCoords(GetPlayerPed(-1), x, y, z)
SetEntityHeading(GetPlayerPed(-1), playerheading)
Citizen.Wait(250)
loadanimdict('mp_arresting')
TaskPlayAnim(GetPlayerPed(-1), 'mp_arresting', 'b_uncuff', 8.0, -8,-1, 2, 0, 0, 0, 0)
Citizen.Wait(5500)
cuffed = false
ClearPedTasks(GetPlayerPed(-1))
end)
RegisterCommand('cuff', function()
local target, distance = ESX.Game.GetClosestPlayer()
playerheading = GetEntityHeading(GetPlayerPed(-1))
playerlocation = GetEntityForwardVector(PlayerPedId())
playerCoords = GetEntityCoords(GetPlayerPed(-1))
local target_id = GetPlayerServerId(target)
if distance <= 2.0 then
TriggerServerEvent('esx_policejob:requestarrest', target_id, playerheading, playerCoords, playerlocation)
else
ESX.ShowNotification('Not Close Enough')
end
end)
RegisterCommand('uncuff', function()
local target, distance = ESX.Game.GetClosestPlayer()
playerheading = GetEntityHeading(GetPlayerPed(-1))
playerlocation = GetEntityForwardVector(PlayerPedId())
playerCoords = GetEntityCoords(GetPlayerPed(-1))
local target_id = GetPlayerServerId(target)
TriggerServerEvent('esx_policejob:requestrelease', target_id, playerheading, playerCoords, playerlocation)
end)
function loadanimdict(dictname)
if not HasAnimDictLoaded(dictname) then
RequestAnimDict(dictname)
while not HasAnimDictLoaded(dictname) do
Citizen.Wait(1)
end
end
end
Server Script
RegisterServerEvent('esx_policejob:requestarrest')
AddEventHandler('esx_policejob:requestarrest', function(targetid, playerheading, playerCoords, playerlocation)
_source = source
TriggerClientEvent('esx_policejob:getarrested', targetid, playerheading, playerCoords, playerlocation)
TriggerClientEvent('esx_policejob:doarrested', _source)
end)
RegisterServerEvent('esx_policejob:requestrelease')
AddEventHandler('esx_policejob:requestrelease', function(targetid, playerheading, playerCoords, playerlocation)
_source = source
TriggerClientEvent('esx_policejob:getuncuffed', targetid, playerheading, playerCoords, playerlocation)
TriggerClientEvent('esx_policejob:douncuffing', _source)
end)
This should give anyone a example of how paired animations are done and allow you to use the cuffing animations in game. All this does is show the animation and cuffing animation … will not keep anyone cuffed… you will need to get that added yourself.
If i can get someone online to help me record, will post a video shortly of the animations in action.
SpikE