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

TextLabels inside of ImageButtons are not respawning properly after death?

Asked by 5 years ago
Edited 5 years ago

Starter GUI: https://ibb.co/Pg00C8h

PlayerGUI Before Death: https://ibb.co/G5tbBHw

PlayerGUI After Death: https://ibb.co/7r64460

Error: https://ibb.co/Vgxk990

I am making an inventory system very similar to the one in Soybeen's "Booga Booga". It works how I want it to so far but when I respawn, I get an error that the TextLabel that display the item and # of items that is inside of the image button does not exist.

To be clear; the Inventory system seems to work perfectly fine after respawn. The amount of Grass and Wood that I have is correctly displayed as I drop stuff. The TextLabel changes it's text when I want it to even when I get the error.

Local Script:

userInputService = game:GetService("UserInputService")
player = game.Players.LocalPlayer
playerGUI = player:WaitForChild("PlayerGui")
inventoryHolderGui = playerGUI:WaitForChild("InventoryScreenGui"):WaitForChild("InventoryHolderFrame")
inventoryMainFrame = inventoryHolderGui:WaitForChild("InventoryFrame")
inventoryContents = player:WaitForChild("Inventory"):GetChildren()
inventoryButtons = inventoryMainFrame:GetChildren()
isInventoryOpen = false
mb1Debounce = false
mb2Debounce = false
--Remote Functions (not relevant to the GUI problem)
dropRequest = game.ReplicatedStorage.DropRequest 
imageButtonActivated = game.ReplicatedStorage.InventoryImageButtonActivate

--Refresh all this stuff on respawn
player.CharacterAdded:Connect(function(char)
    inventoryHolderGui = playerGUI:WaitForChild("InventoryScreenGui"):WaitForChild("InventoryHolderFrame")
    inventoryMainFrame = inventoryHolderGui:WaitForChild("InventoryFrame")
    inventoryContents = player:WaitForChild("Inventory"):GetChildren()
    inventoryButtons = inventoryMainFrame:GetChildren()
end)

userInputService.InputBegan:Connect(function(input,gameProcessed)
    if input.KeyCode == Enum.KeyCode.C and isInventoryOpen == false then
    inventoryHolderGui = playerGUI:WaitForChild("InventoryScreenGui"):WaitForChild("InventoryHolderFrame")
    inventoryMainFrame = inventoryHolderGui:WaitForChild("InventoryFrame")
    inventoryContents = player:WaitForChild("Inventory"):GetChildren()
    inventoryButtons = inventoryMainFrame:GetChildren()
        inventoryHolderGui.Visible = true
        isInventoryOpen = true
        for i,v in pairs(inventoryContents) do
            for o,b in pairs(inventoryButtons) do
                if b.Name == v.Name then
                    if v.Value > 0 then 
                        b.Visible = true
                        b.AmountDisplay.Text = v.Name .. " : " .. tostring(v.Value)
                        b.MouseButton2Down:Connect(function()
                            if mb2Debounce == false then
                                mb2Debounce = true
                                dropRequest:FireServer(v)
                            end
                        end)
                        b.MouseButton2Up:Connect(function()
                            if mb2Debounce == true then
                                mb2Debounce = false
                            end
                        end)
                        b.MouseButton1Down:Connect(function()
                            if mb1Debounce == false then
                                mb1Debounce = true
                                imageButtonActivated:FireServer(v)
                            end 
                        end)
                        b.MouseButton1Up:Connect(function()
                            if mb1Debounce == true then
                                mb1Debounce = false
                            end
                        end)
                        v.Changed:Connect(function(value)
                            if value > 0 then
                                b.Visible = true
                                b.AmountDisplay.Text = v.Name .. " : " .. tostring(v.Value)
                            elseif value <= 0  then
                                value = 0
                                b.Visible = false
                            end
                        end)
                    elseif v.Value <= 0 then
                        b.MouseButton2Down:Connect(function()
                            dropRequest:FireServer(v)
                            --This creates a brick on the server and reduces v.Value by 1
                        end)
                        b.MouseButton1Down:Connect(function()
                            imageButtonActivated:FireServer(v)
                            --Reduces value by 1 on server
                        end)
                        v.Changed:Connect(function(value)
                            if value > 0 then
                                b.Visible = true
                                b.AmountDisplay.Text = v.Name .. " : " .. tostring(v.Value)
                            elseif value <= 0  then
                                value = 0
                                b.Visible = false
                            end 
                        end)
                    end
                end
            end
        end
    elseif input.KeyCode == Enum.KeyCode.C and isInventoryOpen == true then
        inventoryHolderGui.Visible = false
        isInventoryOpen = false
    end
end)

Answer this question