so for some reason it prints found but never prints (buttons.Name). Theres stuff in buttons but it never goes through the loop.

Items = {}
wait(1)
script.Parent:WaitForChild("Buttons")
local buttonchildren = script.Parent.Buttons:GetChildren()
repeat wait() until buttonchildren ~= nil
print("found")

for i,buttons in pairs(script.Parent.Buttons:GetChildren()) do --Never does this
	print(buttons.Name)
	if buttons:FindFirstChild("Head") then
			local Item = script.Parent.BuyableItems:FindFirstChild(buttons.Item.Value)
			if Item ~= nil then
				Items[Item.Name] = Item:Clone()
				Item:Destroy()
			else
				print("Button"..buttons.Name.."is missing and being removed")
			buttons.Head.CanCollide = false
			buttons.Head.Transparency = 1
			end
			buttons.Head.Touched:connect(function(hit)
				print("...")
				if hit.Parent.Humanoid and hit.Parent.Humanoid.Health > 0 then
					local player = game.Players:GetPlayerFromCharacter(hit.Parent)
					local money = game.ServerStorage:FindFirstChild(player.Name)
					local NeededObject = script.Parent.BuyableItems:FindFirstChild(Item.Value)
					if player.Name == script.Parent.Owner.Value then
						if NeededObject then
							if money.Value >= buttons.Parent.Cost then
							money.Value = money.Value - buttons.Parent.Cost
							Items[buttons.Item.Value].Parent = script.Parent.PurchasedItems
						end
						buttons.Head.Transparency = 1
						buttons.Head.CanCollide = false
					end
				end
			end
		end)
	end
end