Problem with Using Table to Name Objects

There is a certain amount of string value inside the player. That number is currently 4. There are also image buttons inside a scrolling frame. It’s the same amount as the string value’s. I used a table to get the names of the four string values. And I want to set the image button’s names to the names of the string values.

Inside the player:
image
Outcome in the scrollingframe:
image
It’s clearly not the same. I’m kind of stuck and have no idea how to fix this.

LocalScript inside ReplicatedFirst:

local petsInInventoryNumber = 0
for _,v in pairs(Player.PetInventory:GetChildren()) do
	petsInInventoryNumber = petsInInventoryNumber + 1
end

local petsInScrollingFrameNumber = 0
for _,v in pairs(Player.PetInventory:GetChildren()) do
	petsInScrollingFrameNumber = petsInScrollingFrameNumber + 1
end

local names = {}
for i, pet in pairs(Player.PetInventory:GetChildren()) do
	table.insert(names,pet.Name)
end

if petsInScrollingFrameNumber == petsInInventoryNumber then
	for i, petName in pairs(names) do
		for i, petInScrollingFrame in ipairs(Player.PlayerGui.Inventory.Pets.ScrollingFrame:GetChildren()) do
			if petInScrollingFrame:IsA("ImageButton") then
				if petInScrollingFrame.Name ~= petName then
					petInScrollingFrame.Name = petName
					break
				end
			end
		end
	end
end
local Player = game.Players.LocalPlayer
local PetInventory = Player:WaitForChild("PetInventory")
local PetInventoryGUI = Player.PlayerGui:WaitForChild("Inventory")
local petsInInventoryNumber = 0
for _,v in pairs(Player.PetInventory:GetChildren()) do
	petsInInventoryNumber = petsInInventoryNumber + 1
end

local petsInScrollingFrameNumber = 0
for _,v in pairs(Player.PetInventory:GetChildren()) do
	petsInScrollingFrameNumber = petsInScrollingFrameNumber + 1
end

local names = {}
for i, pet in pairs(Player.PetInventory:GetChildren()) do
	table.insert(names,pet.Name)
end

if petsInScrollingFrameNumber == petsInInventoryNumber then
	for i, petName in pairs(names) do
		local imagebutton = PetInventoryGUI.Pets.ScrollingFrame:GetChildren()[i]
		if imagebutton:IsA("ImageButton") and imagebutton.Name ~= petName then
			imagebutton.Name = petName
		end
	end
end

Thank you for responding! There is an error though which I don’t know how to fix.
image

Here should be the fixed code, it’s more optimized as it only does one loop and not three. I don’t know why you used three so I just made it one.

local petsInInventoryNumber = 0
local petsInScrollingFrameNumber = 0
local names = {}

for i, v in ipairs(Player.PetInventory:GetChildren()) do
	petsInInventoryNumber += 1
	petsInScrollingFrameNumber = petsInScrollingFrameNumber + 1
	table.insert(names, pet.Name)
end

if petsInScrollingFrameNumber == petsInInventoryNumber then
	for i, petName in ipairs(names) do
		for i, petInScrollingFrame in ipairs(Player.PlayerGui.Inventory.Pets.ScrollingFrame:GetChildren()) do
			if not petInScrollingFrame:IsA("ImageButton") then continue end
			
			petInScrollingFrame.Name = petName
		end
	end
end
1 Like

image
Outcome of your script:
image
The numbers are missing from the end, which is really important.

Why don’t you create the image buttons in the code instead? Other then counting and doing all of this, just loop through the folder and create buttons for each value there.

I’m already doing that. The script is over 1000 lines long so I can’t really paste it.

Aha, then if your doing that, why do you need to edit the names again?

This issue has finally been solved.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.