How would I go about doing this? I know about a set delay, but how to detect when the player ins't moving at all?
LocalScript
local player = game.Players.LocalPlayer player.Idled:Connect(function(time) print(time.." Seconds | AFK") end)
From my experience, the code runs a little after 2 minutes of being idled.
You can use the Idled event which is part of the local player. And when you call the event it will run what ever is inside of it, so that's where you can pop the gui up.
Hope this helped!