Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

When I add more than 1 variable to a table it causes the script to error?[SOLVED]

Asked by 6 years ago
Edited 6 years ago

I have this script and it updates GUI values basically but its firing functions when its not supposed to.

Heres the code and ill explain more. HEADS UP, this is just portions of the important code not all the code.

local ItemTable = {"Campfire", "Smelter", "StorageChest"}

-- Updates bags values
function BackpackLoot()
    for i,v in pairs(ItemTable) do
        if script.Parent.Parent.InteractGui.Adornee.Parent.Name ~= v then
            local DeadBackpack = script.Parent.Parent.InteractGui.Adornee.Parent.Name
            StorageItem.Wood.Amount.Text = ReplicatedStorage.PlayerStats[DeadBackpack].Wood.Value
            StorageItem.Cloth.Amount.Text = ReplicatedStorage.PlayerStats[DeadBackpack].Cloth.Value
            StorageItem.Stone.Amount.Text = ReplicatedStorage.PlayerStats[DeadBackpack].Stone.Value
            StorageItem["Raw Metal"].Amount.Text = ReplicatedStorage.PlayerStats[DeadBackpack]["Raw Metal"].Value
            StorageItem.Metal.Amount.Text = ReplicatedStorage.PlayerStats[DeadBackpack].Metal.Value
            StorageItem["Raw Sulfur"].Amount.Text = ReplicatedStorage.PlayerStats[DeadBackpack]["Raw Sulfur"].Value
            StorageItem.Sulfur.Amount.Text = ReplicatedStorage.PlayerStats[DeadBackpack].Sulfur.Value
            StorageItem.Charcoal.Amount.Text = ReplicatedStorage.PlayerStats[DeadBackpack].Charcoal.Value
            StorageItem["Raw Meat"].Amount.Text = ReplicatedStorage.PlayerStats[DeadBackpack]["Raw Meat"].Value
            StorageItem["Cooked Meat"].Amount.Text = ReplicatedStorage.PlayerStats[DeadBackpack]["Cooked Meat"].Value
        elseif script.Parent.Parent.InteractGui.Adornee.Parent.Name == v then
            -- Do nothing
        end
    end
end

-- Fires the backpack event
function AdorneeChanged()
    for j,m in pairs(ItemTable) do
        if script.Parent.Parent.InteractGui.Adornee.Parent.Name ~= m then
            for i,v in pairs(ReplicatedStorage.PlayerStats[script.Parent.Parent.InteractGui.Adornee.Parent.Name]:GetChildren()) do
                v.Changed:Connect(BackpackLoot)
            end
        elseif script.Parent.Parent.InteractGui.Adornee.Parent.Name == m then
            -- Do nothing
        end
    end
end

-- Fires to update bags values
for i,v in pairs(ReplicatedStorage.PlayerStats[Player.Name]:GetDescendants()) do
    v.Changed:Connect(AdorneeChanged)
end

So the problem is the "Fires the backpack even" shouldnt fire if the adornee.Parent.Name is equal to a string in the table, but it still does. Thats the problem, its like its ignoring the table completely. I tell it if the adornee.Parent.Name is equals to the table to do nothing but its still firing the function when its not supposed to do anything if the name equals a value in the table.

So any ideas?

UPDATE

I have been testing it and when you add any more than 1 variable to the table it breaks it, if there is only 1 variable in the table then it works fine but anymore than that and it breaks? Any ideas?

0
That's one of the funky things about Lua. Unlike other programming languages, it'll fire a function even if you don't call it if there is no specific calling of that function. I'd say that you would use the return keyword. DeceptiveCaster 3761 — 6y
0
The return keyword is specifically used to stop a function. Put it in the function you don't want to run. DeceptiveCaster 3761 — 6y
0
Separate tables, followed by require()? DeceptiveCaster 3761 — 6y
0
That wont realllly work.... GottaHaveAFunTime 218 — 6y

Answer this question