How to Detect Speed of a Client’s Device

I would like to know if there is anyway to see how beefy the hardware of a client’s device is. I’m working on a rendering system and was flooded with other results when I searched for this. If they’re is no way for that is there a way to see or set the client’s graphics quality?

If all else fails would ping be a good way to go about this? Thanks for any responses!

I’m just going to use a manual switch that has a better looking gui

Stores stuff in replicated so is ignored by render

This isn’t detectable last time i checked.

I’m pretty sure you can see the client’s graphics quality from UserSettings. From there you can use UserSettings():GetService("UserGameSettings").SavedQualityLevel to get the their implied quality level?

Source:
https://developer.roblox.com/en-us/api-reference/class/UserSettings
https://developer.roblox.com/en-us/api-reference/class/UserGameSettings

Huh,
https://developer.roblox.com/en-us/api-reference/event/DataModel/GraphicsQualityChangeRequest

2 Likes

There’s no way to actually check a client’s pc stats as far as I am aware. The best thing to check is probably UserGameSettings.SavedQualityLevel. This should return the quality setting of someone. This doesn’t work when the client has thier setting on automatic. Here’s the wiki about it.

I wouldn’t recommand using ping tho. Someone can have the best pc in the world but have horrible connection. Ping would only detect the connection not the actual computer stats.

What I would recommand is creating your own settings tab where the use can specify how detailed they want a map/how accurate something should be.

3 Likes

As goldenstein64 said, UserSettings is a way to see graphics quality of a person. Although all you can do to give a suggestion message. You can’t and shouldn’t enforce player to change graphics level, this would make end user experience worse than some lag at some point.
Still, there are some hacky ways, where you decide to render some objects for players or not.

You can Maybe Check a Clinets Ping by Display their ping on a screen gui then do something like this:
Add a RemoteFunction in ReplicatedStorage and Name it

FPSPING

game.ReplicatedStorage:WaitForChild('FPSPING').OnServerInvoke = function(Plr,Arg)
    	if Arg == 'ping' then --This would be in a Normal Script
    		return
    	end
    end

You wold now need a ScreenGui and insert a Text Label.
Inside the Text Label insert a LocalScript
The LocalScript Code:

local player = game.Players.LocalPlayer

player:WaitForChild('PlayerGui'):SetTopbarTransparency(1)

local RunService = game:GetService("RunService")

local Last = tick()

local FPS = 0

local Function = game.ReplicatedStorage:WaitForChild('FPSPING')

function GetPing()

local Start = tick()

Function:InvokeServer('ping')

local ping = tick()-Start

return math.floor(ping*1000+.5)

end

RunService.Stepped:connect(function() -- Experiment with Stepped, Heartbeat, or RenderStepped

FPS = ("FPS: "..1/(tick()-Last))

Last = tick()

end)

while wait(0.5) do

script.Parent.Text = string.sub(FPS, 1, 7) -- .. ' | Ping: ' .. GetPing()..'ms'

script.Parent.Parent.TextLabel1.Text = 'Ping: '..GetPing()..'ms'

end

This is only useful if you want to check a players connectivity Strength insead of, for instance , CPU/GPU Rendering Power.

Don’t try to implement pseudo checks to determine whether to use less intensive rendering or more intensive one. Instead, let the player decide. Someone can have a great PC but still prefer their game to use less ram.

3 Likes

AFAIK this isn’t possible, no need to try and overcomplicate things in these cases.

The best way to tackle this would be either to have a menu that allows the players to fine-tune the rendering client-side (if I were you, that’s the option I’d personally go with) or to rely on UserSettings.

Making your own settings and adding those options there would be 100x better than just trying to unreliably read the player’s current graphic level. For example, render distance slider, render update delay, etc.