function handleEquip(C)if C then if C.Parent~=char then hum:EquipTool(C)else hum:UnequipTools()end end end function create()local C=#inputOrder local h=C*iconSize.X.Offset+(C+1)*iconBorder.x local g=iconSize.Y.Offset+2*iconBorder.y frame.Size=UDim2.new(0,h,0,g)frame.Position=UDim2.new(.5,-(h/2),1,-(g+iconBorder.y*2))frame.Visible=true for C=1,#inputOrder,1 do local h=inputOrder[C]local g=template:Clone()g.Parent=frame g.Label.Text=h.txt g.Name=h.txt g.Visible=true g.Position=UDim2.new(0,(C-1)*iconSize.X.Offset+iconBorder.x*C,0,iconBorder.y)g.ImageTransparency=unequipped local r=h.tool if r then g.Tool.Image=r.TextureId end g.Tool.MouseButton1Down:Connect(function()for C,h in pairs(inputKeys)do if h.txt==g.Name then handleEquip(h.tool)end end end)end template:Destroy()end function setup()local C=bp:GetChildren()for h=1,#C,1 do if C[h]:IsA("\084\111\111\108")then for h=1,#inputOrder,1 do local g=inputOrder[h]if not g.tool then g.tool=C[h]break end end end end create()end function adjust()for C,h in pairs(inputKeys)do local g=h.tool local r=frame:FindFirstChild(h.txt)if g then r.Tool.Image=g.TextureId if g.Parent==char then r.ImageTransparency=equipped else r.ImageTransparency=unequipped end else r.Tool.Image=""r.ImageTransparency=unequipped end end end function onKeyPress(C)local h=C.KeyCode.Name local g=inputKeys[h]if g and uis:GetFocusedTextBox()==nil then handleEquip(g.tool)end end function handleAddition(C)if C:IsA("\084\111\111\108")then local h=true for g,r in pairs(inputKeys)do local I=r.tool if I then if I==C then h=false end end end if h then for h=1,#inputOrder,1 do local g=inputOrder[h].tool if not g then inputOrder[h].tool=C break end end end adjust()end end function handleRemoval(C)if C:IsA("\084\111\111\108")then if C.Parent~=char and C.Parent~=bp then for h=1,#inputOrder,1 do if inputOrder[h].tool==C then inputOrder[h].tool=nil break end end end adjust()end end
--< 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
