[ESX] MSK Handcuffs - Realistic Handcuffs

Tebex [2.20€]: https://www.msk-scripts.de/package/5159927
Preview: [ESX] MSK Handcuffs - YouTube


  • Cuff, Hardcuff or Uncuff the Player next to you
  • Cuff players with items
  • Cuff players with commands
  • Timer for uncuff players
  • Animations and Sounds
  • Admin commands
  • Cuff Status will be saved to database and restored after relog
Readme.md (included)

Events for Jobs

-- serverside
xPlayer.triggerEvent('msk_handcuffs:checkCuff', item)

-- example
xPlayer.triggerEvent('msk_handcuffs:checkCuff', 'cuffs')
xPlayer.triggerEvent('msk_handcuffs:checkCuff', 'hardcufffs')
xPlayer.triggerEvent('msk_handcuffs:checkCuff', 'cuff_keys')
-- clientside
TriggerEvent('msk_handcuffs:checkCuff', source, item)

-- example
TriggerEvent('msk_handcuffs:checkCuff', source, 'cuffs')
TriggerEvent('msk_handcuffs:checkCuff', source, 'hardcufffs')
TriggerEvent('msk_handcuffs:checkCuff', source, 'cuff_keys')


  • You have to use them clientside
-- Get Cuff Status from the player next to you
ESX.TriggerServerCallback('msk_handcuffs:getCuffStatus', function(isCuffed) 
    if isCuffed then
        -- add your code here
        -- add your code here
end, GetPlayerServerId(closestPlayer))
-- Get the Cuff Status from yourself
ESX.TriggerServerCallback('msk_handcuffs:getCuffStatus:self', function(isCuffed) 
    if isCuffed then
        -- add your code here
        -- add your code here


Config = {}
Config.Locale = 'de'
Config.VersionChecker = true
Config.Debug = true
Config.getSharedObject = 'esx:getSharedObject'
-- Items // You have to use 'cuffs' before you can use 'hardcuffs'
Config.Items = {
    cuff = 'cuffs', -- item: 'cuffs' // DisableAllControlActions exept Movement
    hardcuff = 'hardcuff', -- item: 'hardcuff' // Freeze Player Position
    uncuff = 'cuff_keys' -- item: 'cuff_keys' // Uncuff a Player
Config.InteractSound = true -- You need InteractSound for that (https://forum.cfx.re/t/release-play-custom-sounds-for-interactions/8282)
Config.Timer = {
    enable = true, -- Set false to disable this feature
    time = 30 -- in minutes // After this time the player gets uncuffed
-- Player Commands
Config.PlayerCommands = {
    cuffCommand = 'cuff', -- default: 'cuff' // Set false if you dont want the Command
    hardcuffCommand = 'hardcuff', -- default: 'hardcuff' // Set false if you dont want the Command
    uncuffCommand = 'uncuff' -- default: 'uncuff' // Set false if you dont want the Command
-- Admin Commands
Config.AdminGroups = {'superadmin', 'admin'} -- You can set multiple groups
Config.AdminCommands = {
    cuffCommand = 'adcuff', -- default: 'cuff' // example: /cuff playerID
    hardcuffCommand = 'adhardcuff', -- default: 'hardcuff' // example: /adhardcuff playerID
    uncuffCommand = 'aduncuff' -- default: 'uncuff' // example: /aduncuff playerID
-- !!! This function is clientside AND serverside !!!
-- Look for type == 'client' and type == 'server'
function notification(src, type, xPlayer, message) -- xPlayer = ESX.GetPlayerFromId(src)
    if type == 'client' then -- clientside
        ESX.ShowNotification(message) -- replace this with your Notify
    elseif type == 'server' then -- serverside
        xPlayer.showNotification(message) -- replace this with your Notify

Optional Requirements

My other Scripts

Code is accessible No
Subscription-based No
Lines (approximately) ~460
Requirements ESX 1.2 and above; mysql-async or oxmysql
Support Yes

Question: Does this make the ped like an entity? Like other handcuffs, which nullifies all ped based commands?

No, the Ped is still a Ped not an entity.

Option to disable the animation in the config would be nice and can you make the message editable because in my case okokNotify dont support colors in the message (f.e. ~r~) and they are set in the encrypted files atm.

So far nice scipt and working very well.

No, the Translations are in translation.lua you can access this file

Why not use statebag for this? No need database request.

You should add config for disablecontrolactions as you cant speak or do much when cuffed when you should be able to, also is there any chance to get a semi open source version so we can add minigames etc to the cuffing? Also not much info for the readme, its only for police but no just uncuff or cuff exports meaning you have to have the item

I will add a function where you can add the DisabledControlKeys by youself with the next Update. Sure you have to have the item to cuff or uncuff someone.

I mean like say for certain events where there is no player a that needs cuffs since its the event that triggers the event if that makes sense (eg jail script where you get sent and are in cuffs or something)

xPlayer.triggerEvent('msk_handcuffs:checkCuff', item, playerID)

Yeah but that requires a player to have the handcuffs, i mean an event that just handcuffs the player without needing another player to do it so i can trigger it without needing the cop player

Hello, I have some questions, I have been using the script and well, I leave you with a couple of questions

Is there a possibility that the handcuffed user can run or maybe be able to change it at will?

How can I move a handcuffed person? with esx_policejob it was not possible to move a handcuffed player.

1 Like

Question 1: With the latest Update you can add the Controls that you want to active in the config.lua

Question 2: You can use the export in the Readme.md and add it in your policejob. It’s all described in the Readme.md

1 Like

Thanks I will try!!!

still having issue’s with this, players that are not cuffed when flying out sometimes come back in cuffed