Basically, I'm making a Custom Inventory Gui. Theres a bug where it shows 2 of the same item, even though I don't want it to.
I've tried clearing the 2 tables in this script before the cloning process. I've tried adding wait() arguments (that just made things worse lol).
this is the script:
local player = game.Players.LocalPlayer
local character = player.Character
local items = {}
local buttons = {}
local equipped = script.Parent.Handler.Equipped
local selected = script.Parent.Handler.Selected
local location = script.Parent.Handler.Location
game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Backpack,false) -- Makes the original backpack gui invisible
player:WaitForChild("Backpack")
script.Parent.Parent.Parent:WaitForChild("PlayerMain")
function search(location)
for i,v in ipairs(location:GetChildren()) do -- Find all item in a specific location
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 Delete()
for i,v in ipairs(items) do
table.remove(items,v)
v:Destroy()
end
for i,v in ipairs(buttons) do
v:Destroy()
end
end
function Add()
for i,v in ipairs(items) do -- Finds all items in the table
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
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
button.ZIndex = 7
button.BackgroundColor3 = Color3.fromRGB(50,50,50)
button.BorderColor3 = Color3.fromRGB(25,25,25)
button.BorderMode = Enum.BorderMode.Outline
button.BorderSizePixel = 3
table.insert(buttons,button) -- Inserts the button to our table "buttons"
button.MouseEnter: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
if button:GetAttribute("ItemEquipped") == false then
button.BorderColor3 = Color3.fromRGB(255,0,0)
end
script.Parent.Frame.ItemStats.ItemName.Text = v.Name -- Sets the TextLabel's Text to the name of the tool/button
script.Parent.Frame.ItemStats.ItemLevel.Text = "Lv. "..v:GetAttribute("Level")
script.Parent.Frame.ItemStats.ItemDesc.Text = ""..v:GetAttribute("Description")
script.Parent.Frame.ImageLabel.Image = v.TextureId -- Sets the image label's image to the texture id of the tool
selected.Value = v
location.Value = v.Parent
end
button.MouseLeave:Connect(function()
if button:GetAttribute("ItemEquipped") == false then
button.BorderColor3 = Color3.fromRGB(25,25,25)
end
script.Parent.Frame.ItemStats.ItemName.Text = "(Nothing)"
script.Parent.Frame.ItemStats.ItemLevel.Text = "Lv. NaN"
script.Parent.Frame.ItemStats.ItemDesc.Text = "No Description"
script.Parent.Frame.ImageLabel.Image = "rbxassetid://0"
selected.Value = nil
location.Value = nil
end)
button.MouseButton1Click:Connect(function()
if equipped.Value == nil or equipped.Value ~= selected.Value then -- Just the same as the last one
character.Humanoid:UnequipTools() -- Forces the player to unequip the tool that they equipped
if location.Value == player.Backpack then
character.Humanoid:EquipTool(selected.Value)
equipped.Value = selected.Value
button:SetAttribute("ItemEquipped",true)
button.BorderColor3 = Color3.fromRGB(0,255,0)
end
else
character.Humanoid:UnequipTools()
equipped.Value = nil
button.EquipCheck.Visible = false
button:SetAttribute("ItemEquipped",false)
button.BorderColor3 = Color3.fromRGB(25,25,25)
end
end)
end)
end
end
function backpackRefresh()
items = {}
Delete()
search(game.Players.LocalPlayer.Character)
search(game.Players.LocalPlayer.Backpack)
Add()
end
function FrameVis()
if script.Parent.Visible == true then
script.Parent.Parent.Frame.Visible = true
script.Parent.Parent.Parent.PlayerMain.Dark.Main.Visible = false
script.Parent.Parent.Parent.PlayerMain.Dark.StatHUD.Visible = false
elseif script.Parent.Visible == false then
script.Parent.Parent.Frame.Visible = false
script.Parent.Parent.Parent.PlayerMain.Dark.Main.Visible = true
script.Parent.Parent.Parent.PlayerMain.Dark.StatHUD.Visible = true
end
end
Delete()
backpackRefresh()
player.Backpack.ChildAdded:Connect(backpackRefresh)
player.Backpack.ChildRemoved:Connect(backpackRefresh)
character.ChildAdded:Connect(backpackRefresh)
character.ChildRemoved:Connect(backpackRefresh)
FrameVis()
script.Parent:GetPropertyChangedSignal("Visible"):Connect(FrameVis)
this is the few parts that this script interacts with:
Picture of the bug (in case you don't understand what i mean)

2 comments
no errors in the dev console btw
and, said script is a local script. It is called "InventoryHandler", you can see in the image i put