Combatintermediate10 min readupdated 11 Sept 2026

Holster and draw animations for FiveM roleplay

The short answer

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.

Holster and draw animations for FiveM roleplay — illustrated with a FiveM-compatible minimap render

#What a holster script does

  1. Notice the player switched to a holstered weapon (for example a pistol).
  2. Play a draw animation and keep the player from firing until it finishes.
  3. When they switch away, play a holster animation.
  4. Optionally update clothing so the holster looks full or empty.

#A minimal draw/holster script

client.lua
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.

Share this guideXRedditFacebook

Questions

How do I add a holster animation in FiveM?
Detect when the player switches from unarmed to a sidearm, play a draw animation such as reaction@intimidation@1h / intro, and block firing until it ends.
Can players skip the draw animation?
Not if the script disables firing and aiming during it. Without that, they can shoot immediately.
Does a holster script cost performance?
Very little if it checks the weapon about ten times a second and only runs per-frame code during the animation itself.
Can the belt show the gun holstered?
Yes, with clothing packs that include full and empty holster drawables, switched with 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.