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):
-- 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.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.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.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.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.Para teclas que se mantienen, registra dos comandos: '+miaccion' (al pulsar) y '-miaccion' (al soltar), y haz RegisterKeyMapping solo sobre el de '+'.
- 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.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 herramientaGuías relacionadas
Última actualización: 2026-06-29. Crxative-M no está afiliado a Cfx.re ni Rockstar Games.
