Okay, let's first fix a bunch of things.
Tab your code correctly. You can also simplify a few things, like ((1/#t)/5) is really just 1 / 5 / #t or 0.2 / #t.
Don't use print"c1", that's just bad style. Use the parenthesis.
Use good variable names: k doesn't tell me anything. Let's say items. Then v in the first loop is an item.
Thus t are the items that are actually there, I guess. I'll just call it have.
You assign to k on line 11, but don't use that value. So that assignment is meaningless.
Again, let's call v item. Now you add things to s but don't use s. Also, s is just a copy of have.
You can also use the second parameter of Instance.new as the parent, which will cut one line.
Use local variables. z is defined in a loop, so you definitely want it to be local.
This will, in fact, make one new TextLabel per element in the table have. It doesn't matter how many variables represent it, it matters how many times the code is executed -- and Instance.new will be done for each iteration of the loop.
However, you gave every element the same Position so they will all be on top of each other.
Their position should be UDim2.new(0, 0, height * (index - 1), 0) where index is a number 1, 2, 3, ... assigned to each element, e.g., i in that loop. -- It needs to vary depending on which item you're looking at.
plr = script.Parent.Parent.Parent.Parent
print("c.5")
inventory = plr:WaitForChild("plrinventory").ftpinv
items = inventory:GetChildren()
have = {}
print("c1")
for _, item in pairs(items) do
if item.iteminside.Value then
print("c2")
table.insert(have, item)
end
end
if #have >= 1 then
height = 0.2 / #have
for i, item in pairs(have) do
local z = Instance.new("TextLabel", script.Parent)
z.Size = UDim2.new(1, 0, height, 0)
z.Position = UDim2.new(0, 0, height * ( i - 1), 0)
z.Text = item.Sword.Name
z.TextScaled = true
end
end