I have built some VERY(the only thing that changes are the gui that its getting) similar scripts:
local button = script.Parent
local startgui = button.Parent.Parent
local serverStorage = game:GetService("ServerStorage")
local player = game.Players.LocalPlayer
local function Add1()
local gui1 = serverStorage.HelpGu:Clone()
player:WaitForChild("PlayerGui")
gui1.Parent = player.PlayerGui
end
local function rid()
startgui.Play.PlayBut.Visible = false
startgui.Play.PlayBut.Active = false
startgui.Help.HelpBut.Visible = false
startgui.Help.HelpBut.Active = false
startgui.About.AboutBut.Visible = false
startgui.About.AboutBut.Active = false
Add1()
end
local function onButtonClick()
rid()
end
button.MouseButton1Click:connect(onButtonClick)
(thats only one but you get the idea)
Thanks M39a9am3R!

2 comments
ServerStorage is kept on the Server. The client will not be able to access it. Meaning, any local scripts that try to utilize the service will fail to find any objects in it. Try moving the objects to ReplicatedStorage, which is distributed to all clients.
Thanks that seemed to work!