game.ReplicatedStorage.UpdateControls.OnClientEvent:Connect(function(binds)
--unbind current controls
game:GetService("ContextActionService"):UnbindAction("jumpAction")
--bind new
local event = UIS.InputEnded:connect(function(input)
if input.KeyCode == Enum.KeyCode[binds.Jump] then
jumpfunc()
elseif input.KeyCode == Enum.KeyCode[binds.Crouch] then
crouchfunc()
elseif input.KeyCode == Enum.KeyCode[binds.Prone] then
pronefunc()
end
end)
My code is above. binds is a table of the binds, returned when the controls are updated/on start. My issue is, when the new controls are set, the old ones still work as well.

1 comment
Why are you changing the keybinds with a remote event? Isn't that supposed to be something stored by each client? Why are you unbinding using ContextActionService and binding with UserInputSevice?