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

How can I convert this script to work with a GUI click?

Hi there, so I've got this script that spawns a GUI on click, and needs to work with FE. But I tried simply putting the GUI into StarterGUI, and that doesn't work with FE. Could anyone please help me make this script work as a GUI Button? Note: IT NEEDS TO USE THE GUIGIVE EVENT!

script.Parent.Touched:connect(function(hit)
	if hit and hit.Parent and hit.Parent:FindFirstChild("Humanoid") then
		game.ReplicatedStorage.GuiGive:FireClient(game.Players:GetPlayerFromCharacter(hit.Parent),game.ReplicatedStorage,script.Name)
	end
end)

ServerScript that is needed to equip the gear!

local g,flash
function Assign(p, Value, Type)	
	local Player=p.Character	
	
	if Type=="Uniform Change"or Type=="Uniform Gear Change"or Type=="Gear" then
		if p.PlayerGui:FindFirstChild("Uniform Change") or p.PlayerGui:FindFirstChild("Uniform Gear Change") or p.PlayerGui:FindFirstChild("Gear")then return end		
		Value[Type]:Clone().Parent=p.PlayerGui
	end
	
	if Type=="Shirt" or Type=="Pants" then
	local pID = Value:findFirstChild("ID") -- Location of the ID Value
	local ID = pID.Value -- Value of ID
	local baseID = "rbxassetid://"
	local thing=Instance.new(Type)
		if Player:findFirstChild(Type) == nil then
			if Type=="Shirt" then thing.ShirtTemplate=baseID..tostring(ID-1) elseif Type=="Pants" then thing.PantsTemplate=baseID..tostring(ID-1)end
			thing.Parent=Player
			thing.Name = Type
		else
			if Type=="Shirt" then thing.ShirtTemplate=baseID..tostring(ID-1) elseif Type=="Pants" then thing.PantsTemplate=baseID..tostring(ID-1)end
			thing.Parent = Player
			local t = Player:findFirstChild(Type)
			t:remove()
			thing.Name = Type
			end	
	end
	
	if Player:findFirstChild("Humanoid") and (Type=="Gear" and not Player:findFirstChild("Gear")) or (Type=="Hat" and not Player:findFirstChild("Face")) then		
		if Type=="Hat" then g=Value:FindFirstChild("Face"):Clone() elseif Type=="Gear" then g=Value:FindFirstChild("Gear"):Clone() end
		g.Parent = Player
		local C = g:GetChildren()		
		for i=1, #C do
			if C[i].className == "Part" or "Unionoperation" then
				local W = Instance.new("Weld")
				W.Part0 = g.Middle
				W.Part1 = C[i]
				local CJ = CFrame.new(g.Middle.Position)
				local C0 = g.Middle.CFrame:inverse()*CJ
				local C1 = C[i].CFrame:inverse()*CJ
				W.C0 = C0
				W.C1 = C1
				W.Parent = g.Middle
				g.Middle.Transparency = 1
			end
				local Y = Instance.new("Weld")
				if Type=="Hat" then Y.Part0 = Player.Head elseif Type=="Gear" then Y.Part0 = Player.Torso end
				Y.Part1 = g.Middle
				Y.C0 = CFrame.new(0, 0, 0)
				Y.Parent = Y.Part0
		end

		local h = g:GetChildren()
		for i = 1, # h do
			h[i].Anchored = false
			h[i].CanCollide = false
		end
		if Type=="Hat" then flash=Value:FindFirstChild("RemoveH"):Clone() elseif Type=="Gear" then flash=Value:FindFirstChild("RemoveG"):Clone() end
		if Type=="Hat" then flash.Frame.RH.Hat.Disabled=false elseif Type=="Gear" then flash.Frame.RG.Gear.Disabled=false end 
		flash.Parent = p.PlayerGui		
		
	end
end

function game.ReplicatedStorage.Order.OnServerInvoke(p,val,typ)
	Assign(p,val,typ)
end


3 comments

0

It needs a click detector.

0

@himgoodpack I don't want it to be inside a part, I want this to be INSIDE my GUI's button.

0

If you put something in StarterGUI, players will only see it after they respawn.

3 answers

local ButtonToBeClicked = script.Parent
local GUIRetrieved = game.ReplicatedStorage.GiveGui

ButtonToBeClick.MouseButton1Click:connect(function()
	local New = GUIRetrieved:Clone()
	new.Parent = game:GetService("Players").LocalPlayer.StarterGui
end)

2 comments

0

Will not work as it needs to use the GuiGive event to spawn the GUI.

0

StarterGui isn't located in the LocalPlayer, so it will return an error.

Remote Events are not needed, put this in a LocalScript.

script.Parent.MouseButton1Click:Connect(function()
	local gui = game:GetService("ReplicatedStorage"):WaitForChild("ScreenGui"):Clone() --whatever your GUIs name is
	gui.Parent = game:GetService("Players").LocalPlayer.PlayerGui --NOT StarterGui as it will return nil.
end)

Please accept my answer if this helped!

1 comment

0

script.Parent.MouseButton1Click:connect(function() print("Clicked") game.ReplicatedStorage.GuiGive:FireClient(game.Players.Macoryx.Character,game.ReplicatedStorage,script.Name) end)

Okay so you are going to want to put every single tool into replicated or server storage. Next you want a local script, a script, and a remote event all as children somewhere in the GUI, preferably at a level where you can use the same local script for every text button.

Why do we need a local script and a regular script? Well with filtering enabled, local scripts cannot see serverstorage or workspace, and a few other services. Consequently, regular scripts can't communicate and change things like playergui. This tutorial, wiki.roblox.com/index.php?title=Remote_Events_and_Functions, explains it way better than me.

So the first thing we need to do is create a simple function that detects if the button is clicked, and then tells the remote event that the button was clicked.

-- Local Script Code --

event = script.Parent:WaitForChild("RemoteEvent") -- in this case the scripts parent is a text button

script.Parent.MouseButton1Click:connect(function() -- anonymous function detects mouse click
	-- you can insert client side code here (any code that manipulates gui, or anything inside the local player)
	event:FireServer() -- This tells the event to literally trigger the server script function
end)

So now we want our regular (server) script:

--Regular Script Code--

local event = script.Parent:WaitForChild("RemoteEvent")  -- in this case this scripts parent is the exact same text button as the local script.

script.Parent.RemoteEvent.OnServerEvent:connect(function(player)
	game.ReplicatedStorage.Tool:Clone().Parent = player.Backpack -- You can also store the tool in server storage and I recommend you do.
end)

This is your bare bones, basic framework for your GUI. Hope this helps. Feel free to ask me any questions.

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