Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

PlayerGui is not a valid member of player?

I've had to ask this many times so I am going to be as detailed as possible. I'm making a sell to player gui and this is under the StarterPlayerScripts:

local Player = game.Players.LocalPlayer -- Getting the player   
local Mouse = Player:GetMouse() -- Getting the players mouse


Mouse.Button1Down:Connect(function() -- Detecting when player presses the left mouse button

    if Mouse.Target.Parent:FindFirstChild("Humanoid") and 
        Player.TeamColor.Name == ("Dirt brown") then -- Checking if the Mouse is over a player and on a selling team
        print(Mouse.Target.Parent.Name) --Check  other player's name
    local mousetarget = Mouse.Target.Parent
local target = game:GetService("Players")[mousetarget.Name]
        target.PlayerGui.StartScreen.Frame.Visible = true --Open other player's Gui
        print("Debug") --Debug

    end
end)

When someone clicks another player a gui pops up on the other players screen. I've been told to do remote events and more but this is the closest i have gotten. When clicking on another player I am given:

PlayerGui is not a valid member of player --Line 12

1 answer

✓ Accepted answer

The answer for this is Remote Events

Remote events are like small doors to the server to execute specific functions that will replicate across all the clients (otherwise, changes you make on your client will STAY on your client)

To fix this (in other words, what I'd do), you'd fire a Remote event to the server telling the server that the player clicked another player. The server would receive this and tell the player that you clicked to display the GUI.

First, you'd need to put a remote event in ReplicatedStorage called "PlayerClickedPlayer" and put this script in ServerScriptService:

--// Services
local replicatedStorage = game:GetService("ReplicatedStorage")

replicatedStorage:WaitForChild("PlayerClickedPlayer").OnServerEvent:Connect(function(player,subject)
	game:GetService("ReplicatedStorage"):WaitForChild("PlayerClickedPlayer"):FireClient(subject)
end)

And this is your fixed code that you posted before (client script):

--// Services
local players = game:GetService("Players")
local replicatedStorage = game:GetService("ReplicatedStorage")
--// Objects
local player = players.LocalPlayer
local mouse = player:GetMouse()

mouse.Button1Down:Connect(function()
	local player = players:GetPlayerFromCharacter(Mouse.Target.Parent)
	if player and player.TeamColor.Name == ("Dirt brown") then
		replicatedStorage:WaitForChild("PlayerClickedPlayer"):FireServer(player)
	end
end)

replicatedStorage:WaitForChild("PlayerClickedPlayer").OnClientEvent:Connect(function()
	player:WaitForChild("PlayerGui").StartScreen.Frame.Visible = true
end)

(Also improved some things for you)

Hope this helps

1 comment

0

I can't get the server to connect

This discussion is preserved as it was. New answers, comments, and votes are closed.