
Realistic handcuffs with animations, props, drag, headbag, tape and ankle tracker.
MSK Handcuffs - Realistic Handcuffs with Animations, Props and an In-Game Admin Dashboard
MSK Handcuffs is a realistic handcuff system for ESX Legacy and QBCore, built on top of msk_core. Cuff, hardcuff, escort and search your suspects with proper animations and props, put an ankletracker on them, pull a bag over their head or tape their mouth shut. Everything is validated on the server, and the whole status survives a relog or a restart.
The big change in v3.0.0: the script was rewritten from scratch. It now speaks QBCore as well as ESX, it finally has a proper target menu, it stores everything in MySQL instead of a flat file, and you stop editing Lua altogether, because there is an in-game admin dashboard for all of it.
Documentation
YouTube Preview
CFX Post
This is new in v3. In v2 there simply were no target options, the only thing Config.Target did was bind the undrag key. Now every action sits right on the player: cuff, hardcuff, uncuff, ankletracker, headbag, tape, drag, put in car and put out of car. Every entry can be switched off individually.
ox_target is the recommended system and is picked automatically when it is running. qb-target works just as well if that is what your server uses, and you can also force one of the two.
The entries are translated into the language you set in the dashboard, and the label follows the current state, so the same option reads "Put on headbag" or "Remove headbag" depending on what is going on. Change the language and the text updates live, without a restart. Cuff only shows up on someone who isn't cuffed, uncuff only on someone who is, and so on.
Type /handcuffadmin in-game and you get a full panel for the whole script. On the first start your config is imported into the database once, and from then on the dashboard is where you work. Changes apply live, no restart needed.
group.admin always has full access and can never be locked out, group.user can never get in. It reads your server.cfg ACE groups, your framework groups and, if you use it, luxu_admin v2 staff groups.Every single action is checked again on the server against the caller's rights. The UI only hides the buttons, the server is what actually decides.
The basics:
The right key for the right cuffs:
Uncuffing only works with the item that actually matches. Cable ties open with scissors, handcuffs open with the cuff keys, and nothing else. If the officer is missing the item, the notification names the item's real in-game label instead of the internal item name. Whether the key gets consumed is your call, and by default it stays in the inventory. The same goes for taking off a headbag or the tape, where by default no item is needed at all.
About the UI:
The interface is written in React + Vite + TypeScript in the MSK dark and green style. It is fully offline, so all fonts and icons ship with the script. No Google Fonts, no CDN, no outside requests at runtime. It comes in English, German and Hungarian.
On the security side:
The client only asks, the server decides. Distance, item possession, job and the current status are all re-validated server-side for every single action, so a modified client can't cuff someone across the map or with an item it doesn't have. The old self-uncuff exploit is gone, the auto-uncuff timer and the uncuff on death run on the server, and players can no longer set their own cuff status. The status itself lives in replicated statebags, so any other resource can read it without a callback.
Migrating from v2:
You do not import an .sql file. On the first start the tables are created, and if you still have the old database.json around it is imported once, automatically, with a backup. config.lua is replaced by a config/ folder, so give your config a quick look after updating. Some exports and events were renamed or removed, and the migration page lists all of them.
There are ready-made guides in the documentation for wiring this into esx_policejob and the Jaksam job_creator.
Incl. VAT · Instant delivery
Login with your CFX.re account to purchase