Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

[HELP] Stop Players from picking up Tools?

Asked by 5 years ago
Edited 5 years ago

So i got this Backpack Gui, it creates slots (10) where tools go, when a Player picks them up. My Problem now is that if a player has 11 Tools and he drops one of those 10, which are shown, the 11 tool is just gone. it isnt going automaticly in the missing Slot. I just cant access the 11 Tool.

Any way to put the tool automaticly in the missing field? or stop the players from picking up Tools, when he is full (10 tools)?


game:GetService('StarterGui'):SetCoreGuiEnabled(Enum.CoreGuiType.Backpack, false) --< variables >-- local uis = game:GetService("UserInputService") local player = game.Players.LocalPlayer local char = workspace:WaitForChild(player.Name) -- added WaitForChild local bp = player.Backpack local hum = char:WaitForChild("Humanoid") local frame = script.Parent.Frame local template = frame.Template local equipped = 0.7 -- icon transparencies local unequipped = 0.2 local iconSize = template.Size local iconBorder = {x = 15, y = 5} -- pixel space between icons local inputKeys = { -- dictionary for effective referencing ["One"] = {txt = "1"}, ["Two"] = {txt = "2"}, ["Three"] = {txt = "3"}, ["Four"] = {txt = "4"}, ["Five"] = {txt = "5"}, ["Six"] = {txt = "6"}, ["Seven"] = {txt = "7"}, ["Eight"] = {txt = "8"}, ["Nine"] = {txt = "9"}, ["Zero"] = {txt = "0"}, } local inputOrder = { -- array for storing the order of the keys inputKeys["One"],inputKeys["Two"],inputKeys["Three"],inputKeys["Four"],inputKeys["Five"], inputKeys["Six"],inputKeys["Seven"],inputKeys["Eight"],inputKeys["Nine"],inputKeys["Zero"], } --< functions >-- function handleEquip(tool) if tool then if tool.Parent ~= char then hum:EquipTool(tool) else hum:UnequipTools() end end end function create() -- creates all the icons at once (and will only run once) local toShow = #inputOrder -- # operator can only be used with an array, not a dictionary local totalX = (toShow*iconSize.X.Offset)+((toShow+1)*iconBorder.x) local totalY = iconSize.Y.Offset + (2*iconBorder.y) frame.Size = UDim2.new(0, totalX, 0, totalY) frame.Position = UDim2.new(0.5, -(totalX/2), 1, -(totalY+(iconBorder.y*2))) frame.Visible = true -- just in case! for i = 1, #inputOrder do local value = inputOrder[i] local clone = template:Clone() clone.Parent = frame clone.Label.Text = value["txt"] clone.Name = value["txt"] clone.Visible = true clone.Position = UDim2.new(0, (i-1)*(iconSize.X.Offset)+(iconBorder.x*i), 0, iconBorder.y) clone.ImageTransparency = unequipped local tool = value["tool"] if tool then clone.Tool.Image = tool.TextureId end clone.Tool.MouseButton1Down:Connect(function() -- click icon to equip/unequip for key, value in pairs(inputKeys) do if value["txt"] == clone.Name then handleEquip(value["tool"]) end end end) end template:Destroy() end function setup() -- sets up all the tools already in the backpack (and will only run once) local tools = bp:GetChildren() for i = 1, #tools do if tools[i]:IsA("Tool") then -- does not assume that all objects in the backpack will be a tool (2.11.18) for i = 1, #inputOrder do local value = inputOrder[i] if not value["tool"] then -- if the tool slot is free... value["tool"] = tools[i] break -- stop searching for a free slot end end end end create() end function adjust() for key, value in pairs(inputKeys) do local tool = value["tool"] local icon = frame:FindFirstChild(value["txt"]) if tool then icon.Tool.Image = tool.TextureId if tool.Parent == char then -- if the tool is equipped... icon.ImageTransparency = equipped else icon.ImageTransparency = unequipped end else icon.Tool.Image = "" icon.ImageTransparency = unequipped end end end function onKeyPress(inputObject) -- press keys to equip/unequip local key = inputObject.KeyCode.Name local value = inputKeys[key] if value and uis:GetFocusedTextBox() == nil then -- don't equip/unequip while typing in text box handleEquip(value["tool"]) end end function handleAddition(adding) if adding:IsA("Tool") then local new = true for key, value in pairs(inputKeys) do local tool = value["tool"] if tool then if tool == adding then new = false end end end if new then for i = 1, #inputOrder do local tool = inputOrder[i]["tool"] if not tool then -- if the tool slot is free... inputOrder[i]["tool"] = adding break end end end adjust() end end function handleRemoval(removing) if removing:IsA("Tool") then if removing.Parent ~= char and removing.Parent ~= bp then for i = 1, #inputOrder do if inputOrder[i]["tool"] == removing then inputOrder[i]["tool"] = nil break end end end adjust() end end --< events >-- uis.InputBegan:Connect(onKeyPress) char.ChildAdded:Connect(handleAddition) char.ChildRemoved:Connect(handleRemoval) bp.ChildAdded:Connect(handleAddition) bp.ChildRemoved:Connect(handleRemoval) --< start >-- setup()
0
Could always throw in a variable to detect when the players backpack is full ForeverBrown 356 — 5y
0
Can you show me how? Paintertable 171 — 5y
0
Well, I just did that and i got it working to detect how many items i got. But how do I stop the Player from picking the tool up when he touches it? Paintertable 171 — 5y
0
Maybe add a while loop that checks to see if there are 10 tools in a backpack and if not, destroys a tool? Only problem is that it might destroy a tool that is useful to the player or unwanted to be destroyed RetroGalacticGamer 331 — 5y
0
Nope, This doesnt help me. Paintertable 171 — 5y

Answer this question