As far as I know, the client is responsible for sending the player object to the server (don’t worry, it gets verified by the server so cheaters can’t fire remotes as other players). In Roblox’s engine, there doesn’t seem to be an easily accessible global reference to DataModel, so many functions retrieve it by climbing the hierarchy of an instance (object.Parent.Parent… etc until game is reached). In the case of FireServer and related methods, the remote is used to find DataModel before locating the Players service and LocalPlayer. If the remote’s parent is nil, it can’t find DataModel and will end up sending nil to the server.
Unfortunately, even if this did work, most popular Roblox cheats are able to see and interact with nil instances anyway.