Holster and draw animations for FiveM roleplay
Watch the selected weapon in a client loop; when it changes from unarmed to a sidearm, play a draw animation (the classic choice is reaction@intimidation@1h with the intro clip) and block firing until it ends; when it changes back, play the outro clip. Only react to the weapons that should be holstered, and sleep the loop when nothing changes.
In vanilla GTA V a pistol appears in your hand instantly. On a roleplay server that removes a whole beat from every tense scene: the moment a hand goes to the waistband. A holster script adds that beat — a short draw animation when a weapon is pulled and a holster animation when it is put away — and can make it faster for trained police than for a nervous civilian.

#What a holster script does
- Notice the player switched to a holstered weapon (for example a pistol).
- Play a draw animation and keep the player from firing until it finishes.
- When they switch away, play a holster animation.
- Optionally update clothing so the holster looks full or empty.
#A minimal draw/holster script
local HOLSTERED = {
[`WEAPON_PISTOL`] = true, [`WEAPON_COMBATPISTOL`] = true,
[`WEAPON_PISTOL_MK2`] = true, [`WEAPON_STUNGUN`] = true,
}
local DICT = 'reaction@intimidation@1h'
local function loadDict(dict)
RequestAnimDict(dict)
while not HasAnimDictLoaded(dict) do Wait(0) end
end
local function playBlocking(clip, ms)
local ped = PlayerPedId()
loadDict(DICT)
TaskPlayAnim(ped, DICT, clip, 8.0, -8.0, ms, 48, 0.0, false, false, false)
local untilTime = GetGameTimer() + ms
while GetGameTimer() < untilTime do
DisablePlayerFiring(PlayerId(), true)
DisableControlAction(0, 25, true) -- aim
Wait(0)
end
RemoveAnimDict(DICT)
end
CreateThread(function()
local last = `WEAPON_UNARMED`
while true do
local _, current = GetCurrentPedWeapon(PlayerPedId(), true)
if current ~= last then
if HOLSTERED[current] and last == `WEAPON_UNARMED` then
playBlocking('intro', 1200) -- draw
elseif HOLSTERED[last] and current == `WEAPON_UNARMED` then
playBlocking('outro', 900) -- holster
end
last = current
end
Wait(100)
end
end)Flag 48 plays the animation on the upper body only, so the player can still walk. The loop checks ten times a second, which is responsive and cheap. Timings are a starting point; watch the animation in game and match the blocking time to it.
#Police versus civilians
A common roleplay touch: officers draw from a duty holster faster and with a different, more practised clip, while civilians pull from the waistband. Read the job from your framework and choose the timing accordingly. Keep it short either way — a draw longer than about one and a half seconds feels like lag rather than realism.
#Clothing-based holsters
Many police clothing packs include two versions of the duty belt: holster with a pistol and holster empty. A holster script can switch between them with SetPedComponentVariation when the weapon is drawn and put away, so the belt matches what is in the officer’s hand. The drawable numbers depend on your clothing pack.
#Built-in unholster clips
GTA V already plays short unholster clips defined in pedpersonality.meta (the UNHOLSTER_* groups). A script-driven draw replaces the feel of those with a longer, visible motion. If an addon weapon’s built-in unholster looks wrong, check its entries there — see weaponanimations.meta.
Questions
How do I add a holster animation in FiveM?
reaction@intimidation@1h / intro, and block firing until it ends.Can players skip the draw animation?
Does a holster script cost performance?
Can the belt show the gun holstered?
SetPedComponentVariation.Ready to pick a map?
Twelve themes on three base map styles, $8 each, instant download.
Relevant to what you just read
Look it up while you work
The reference tables this guide leans on, free and without an account.
- All 860 ped model namesEvery model GetHashKey resolves, with its hash and how many clothing components and props it carries.