Basically, I have got the Inventory System to work pretty darn well. When the player presses E on their keyboard the item is then removed from the world and put into their inventory. The problem is that when the item is picked up, multiple quantitys of that time is added and not just one. It should add 1 item and not like 6.
local player = game:GetService("Players").LocalPlayer local char = player.Character local mouse = player:GetMouse() local inv_gui = script.Parent.Inventory local inv = player:WaitForChild("Inventory") while wait(0.1) do for _,item in pairs(workspace["WinterSurvival"].DroppedItems:GetChildren()) do if (item:IsA("Model")) then local itemID function findID(par) for _,kid in ipairs(par:GetChildren()) do if (kid:IsA("Model")) then itemID = kid.ItemID.Value else findID(kid) end end end findID(game:GetService("ReplicatedStorage").Items) local label = script.Parent.PressE if (char:FindFirstChild("Torso").Position - item.Handle.Position).magnitude < 7 then label.Text = "Press [e] to pick up '"..item.Name.."'" label.Visible = true local debounce = true mouse.KeyDown:connect(function(key) if (key:lower() == "e" and debounce) then debounce = false for _,slot in pairs(inv:GetChildren()) do if (slot.ItemID.Value == itemID) then slot.Qty.Value = slot.Qty.Value + 1 label.Visible = false item:Destroy() break else if (slot.ItemID.Value == 0) then slot.Qty.Value = 1 inv_gui[slot.Name].Qty.Visible = true slot.ItemID.Value = itemID slot.Value = item.Img.Value label.Visible = false item:Destroy() break end end end end debounce = true end) else label.Visible = false end else return end end end
on line 27, change
and debounce
to
and debounce == true
this should fix things.
Why should this work?
well, when you say; "if value then" you're saying "if this value is not Nil then do this", now, false isn't nil, it's an actual value, so you have to say either "if value == true" or "if value ~= false" to get the desired result, depending on how strict you want to be with the script.