Cómo se hace

Keybind en FiveM con RegisterKeyMapping

Aprende a crear una tecla configurable en FiveM con RegisterKeyMapping y RegisterCommand: el jugador la reasigna en Ajustes. Incluye teclas mantenidas (+/-) y cuándo usar IsControlJustPressed.

El problema

Quieres que una acción de tu script se dispare al pulsar una tecla (por ejemplo, abrir un menú o usar un objeto), pero no sabes cómo asignarla bien ni cómo dejar que el jugador la cambie a su gusto.

La causa

Hay dos enfoques distintos en FiveM y se confunden a menudo. RegisterKeyMapping crea un binding REAL que aparece en los Ajustes de FiveM (Configuración > Asignación de teclas) y que el jugador puede reasignar. En cambio, IsControlJustPressed/IsControlPressed leen controles del juego por su ID y no son reasignables por el usuario para tu acción. Usar el enfoque equivocado da teclas que chocan con otros recursos o que el jugador no puede cambiar.

La solución

Registra un comando con RegisterCommand y enlázalo a una tecla por defecto con RegisterKeyMapping. El jugador podrá reasignarla desde los Ajustes de FiveM. Para teclas que se mantienen pulsadas, usa el prefijo + (pulsar) y - (soltar):

lua
-- client.lua

-- 1) Acción simple (pulsación única): tecla E abre algo
RegisterCommand('miaccion', function()
    -- Tu lógica al pulsar la tecla
    print('¡Tecla pulsada! Abriendo acción...')
    -- ej: TriggerEvent('mirecurso:abrirMenu')
end, false) -- false = el jugador SÍ puede usar el comando (no restringido a ACE)

-- 2) Enlazar 'miaccion' a la tecla E por defecto.
--    El jugador la verá en Ajustes > Asignación de teclas y podrá cambiarla.
RegisterKeyMapping(
    'miaccion',                       -- nombre del comando (debe coincidir)
    'Descripción visible en Ajustes', -- texto que aparece en el menú de FiveM
    'keyboard',                       -- dispositivo: 'keyboard', 'mouse', 'pad_*'
    'E'                               -- tecla por defecto
)

-- 3) Tecla MANTENIDA: usa comandos con prefijo + y -
--    FiveM llama a '+correr' al pulsar y a '-correr' al soltar.
local corriendo = false

RegisterCommand('+correr', function()
    corriendo = true
end, false)

RegisterCommand('-correr', function()
    corriendo = false
end, false)

-- Basta con registrar el binding del comando '+'
RegisterKeyMapping('+correr', 'Correr (mantener)', 'keyboard', 'LSHIFT')

-- Buena práctica: solo crea un hilo activo MIENTRAS se mantiene la tecla,
-- en vez de comprobar el estado en cada frame para siempre.
CreateThread(function()
    while true do
        if corriendo then
            -- lógica por frame solo cuando hace falta
            Wait(0)
        else
            Wait(250) -- en reposo, casi sin coste
        end
    end
end)

Paso a paso

  1. 1.Crea el comando con RegisterCommand('miaccion', fn, false). El tercer parámetro en false permite que cualquier jugador lo use; ponlo en true solo si quieres restringirlo por permisos ACE.
  2. 2.Enlaza ese comando a una tecla por defecto con RegisterKeyMapping('miaccion', 'Texto en Ajustes', 'keyboard', 'E'). El nombre debe coincidir EXACTAMENTE con el del comando.
  3. 3.Pon estas llamadas en el lado cliente (client.lua) y a nivel superior del script, no dentro de un evento, para que el binding se registre al cargar el recurso.
  4. 4.El jugador reasigna la tecla en Ajustes de FiveM > Asignación de teclas (busca tu descripción). No hace falta editar el código para cambiarla.
  5. 5.Para teclas que se mantienen, registra dos comandos: '+miaccion' (al pulsar) y '-miaccion' (al soltar), y haz RegisterKeyMapping solo sobre el de '+'.
  6. 6.Usa RegisterKeyMapping/RegisterCommand para acciones del usuario reasignables. Reserva IsControlJustPressed(0, control) e IsControlPressed para leer controles del juego por ID cuando necesites detección directa por frame.
  7. 7.Evita spamear: no ejecutes lógica pesada en un while con Wait(0) permanente. Activa el bucle de frame solo mientras la tecla está mantenida y aumenta el Wait cuando esté en reposo.

¿Tu caso es distinto?

Pega tu error en la herramienta IA y te da la solución al instante.

Probar la herramienta

Guías relacionadas

Última actualización: 2026-06-29. Crxative-M no está afiliado a Cfx.re ni Rockstar Games.

Cómo hacer un keybind (tecla) en FiveM con RegisterKeyMapping