I plan to create a screen GUI in the starter GUI that has a script, textbutton, and frame (the textbutton and frame being grouped together) that can add the tool to your inventory when you click on the button, and it is removed when you click again on the same textbutton. When I test the game, it doesn't do anything (AKA, it just sits there being able to be clicked, but the script wasn't functioning). I can tell that there are mistakes, but where are they, and how can I fix them? Here's the script:
local plr = game.Players.LocalPlayer local tools = plr.Backpack local Tool = game.Lighting.Sword Player = script.Parent.Parent.Parent.Parent function Remove() if tools:FindFirstChild("Sword") then tools.Tool:Destroy() wait() end end function Add() if game.Lighting:FindFirstChild("Sword") then Tool = game.Lighting.Tool:clone() Tool.Parent=Player.Backpack wait() end end script.Parent.MouseButton1Down:connect(function() if Player.Backpack:FindFirstChild("Sword") then Remove() else Add() end end)
If you couldn't understand the way I set my screen GUI up, here's the link to the game:
https://www.roblox.com/games/4390322172/Scripting-help-demo-for-mistake
This is all being done on the client, therefore you need remotes. Specifically, remote events.
A typical place for remotes is ReplicatedStorage
, since the server and client can access them. Name it whatever you want, but have a variable that points to it for easy access.
remote_event.OnServerEvent:Connect(function(client) end)
client
points to the player that fired the remote event. From here you can do the same checks you did before.
if not client.Backpack:FindFirstChild("Sword") then game:GetService("ServerStorage").Sword:Clone().Parent = client.Backpack end
And on the client side, get rid of Remove
, Add
, Player
, Tool
, and tools
.
local remote_event = ... -- you know what to do -- Think of your mobile players and console players, don't use Mouse event script.Parent.Activated:Connect(function() remote_event:FireServer() -- no player argument passed - roblox does this implicitly end)