Error: invalid argument #2 (string expected, got Instance)

Im trying to make a placement script to place items on a certain object.
I keep getting the error:
ServerScriptService.Item Placed:16: invalid argument #2 (string expected, got Instance) when I try to run the following string:

local Players = game:GetService("Players")
local factorSzie = Players[plr].PlayerGui.ScreenGui.Tool.Grid.Value

It appears to be only on my PC, and only for this string, it might be because of the [plr] value from a remote event, but I printed it and it was just fine. It could also be the way I’m trying to access the playergui from a server script. I tried reinstalling studio, that didnt work. Any suggestions?
I tried this too to see if it would be able to access it.:
Its not the part of the script using it, since I changed the name, and even tried to remove “.Value” from the string and put it in the part of the script with “factorSize.Value” If it were the case the error would, be the line where its used.
I cant use [plr] first and remove Players because it errors then.
I also tried:

local factorSzie = game.Players[plr].PlayerGui.ScreenGui.Tool.Grid.Value 

That had the same error as above. And I dont want to use events for it since the event will need to be fired every 15 frames to make sure it looks smooth and actually goes where the mouse points, and I dont feel like firing two events every 15 frames, it causes slight lagg in the client as it is.
Also, I need a way to replace wait in server scripts.

It looks like plr might be a Player object, not a string. Try plr.PlayerGui.ScreenGui.Tool.Grid.Value instead.


The plr is an instance you should look for in the players like this Players[]