So I’m making a tower defense game and its a gacha system. I wanna make it so you can have multiple of the same tower so you can sell them but you can’t equip more than one of each tower. The data is split into SelectedTowers and OwnedTowers and I have this code to get the status:
local function getItemStatus(itemName)
if table.find(playerData.SelectedTowers, itemName) then
return "Equipped"
elseif table.find(playerData.OwnedTowers, itemName) then
return "Owned"
end
end
The issue is that all duplicates of one tower are gonna return “Selected” even if only one of them is and the rest are just Owned. How can I fix this?
So when you add the name of the tower to a table. That’s just a string. Might be easier to find selected vs owned by searching the parent object of the tower.
parentObj:GetChildren()
Then you know anything coming from the owned parent is an owned tower object.
local alreadyFound = {}
for i, v in pairs(inventoryFrame:GetChildren()) do
if v:IsA("Frame") and v.Name ~= "Template" then
v:Destroy()
end
end
for i, key in pairs(playerData.OwnedTowers) do
local tower = getTowerByKey(key)
local status = getItemStatus(tower.Name,alreadyFound)
if status == "Equipped" then
newButton.ImageTemplate.Checkmark.Visible = true
newButton.LayoutOrder = towerfromRs.Config.Price.Value
elseif status == "Owned" then
newButton.ImageTemplate.Checkmark.Visible = false
newButton.LayoutOrder = (towerfromRs.Config.Price.Value) + 999999999
end
And then in the getStatus function:
local function getItemStatus(itemName,alreadyFound)
print(alreadyFound,"Before insert")
if table.find(playerData.SelectedTowers, itemName) and not table.find(alreadyFound,itemName) then
table.insert(alreadyFound,itemName)
print(alreadyFound,"After we insert")
return "Equipped"
elseif table.find(playerData.OwnedTowers, itemName) then
return "Owned"
end
end
Is this efficient? I create a new table each time and use it to identify if something has already been returned as “Equipped”
Tbh its hard to say without knowing more about what’s all going on with the scripts. But in my head I’m thinking just adding an attribute to the object “Status”, “Owner” and then setting those values would be easiest and most efficient method to keep track of them. If the object doesn’t exist when its not “Selected” then just keeping a tally of how many owned would be even more efficient. Then is just a single variable with a number count of how many the have. You can adjust that number as they are used.