local player = game.Players.LocalPlayer local character = player.Character local items = {} local buttons = {} game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Backpack,false) -- Makes the original backpack gui invisible function search(location) for i,v in pairs(location:GetChildren()) do -- Find all item in a specific location, primary the StarterPack if v:isA("Tool") then -- If the item found is a "Tool" table.insert(items,v) -- We're going to put all the tools found in a table. end end end function refresh() for i,v in pairs(buttons) do -- Finds all items in the table v:Destroy() -- Destroy them all --Basically every time you open the menu, you have to clear the menu to load the menu back up end for i,v in pairs(items) do -- Finds all items in the table made on line 10 local button = script.Sample:Clone() -- clones the Sample button inside the localscript button.Name = v.Name -- sets the cloned button's name to the name of the item button.LayoutOrder = i --what order it shows up in the grid button.Parent = script.Parent.Handler -- Sets the parent of the cloned button to the handler button.Image = v.TextureId -- Sets the image of the button to the texture id of the tool table.insert(buttons,button) -- Inserts the button to our table "buttons" button.MouseButton1Click:connect(function() if script.Parent.Handler.Selected.Value == nil or script.Parent.Handler.Selected.Value ~= v then -- Checks if the selected value is nothing or if the selected value is not the button script.Parent.Frame.ItemName.Text = v.Name -- Sets the TextLabel's Text to the name of the tool/button script.Parent.Frame.ImageLabel.Image = v.TextureId -- Sets the image label's image to the texture id of the tool script.Parent.Handler.Selected.Value = v if script.Parent.Handler.Selected.Value ~= script.Parent.Handler.Equipped.Value then --if the selected value is not the same as the equipped value then script.Parent.Handler.Location.Value = v.Parent -- Sets the value of our location to the parent of the tool whether it is in the backpack or in the character script.Parent.Frame.Equip.Text = "Equip" -- Self explanatory elseif script.Parent.Handler.Selected.Value == script.Parent.Handler.Equipped.Value then -- If the selected value is the same as the equipped value then... script.Parent.Handler.Location.Value = v.Parent script.Parent.Frame.Equip.Text = "Unequip" end end end) end end function backpackRefresh() --these codes just keep all the inventory refreshed items = {} search(character) search(player.Backpack) refresh() end backpackRefresh() player.Backpack.ChildAdded:connect(backpackRefresh) player.Backpack.ChildRemoved:connect(backpackRefresh) character.ChildAdded:connect(backpackRefresh) character.ChildRemoved:connect(backpackRefresh)