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

This select item script doesn't work after the gui is closed and opened?

Asked by
lucas4114 607 Moderation Voter
8 years ago

So I have a script that lets you click on an item in the inventory to put it into the selected items menu, it works to select and un select items: https://gyazo.com/f00639aa124a679a5800fd6a6bf184ab, but when you close the inventory and reopen it, it doesn't work how it should: https://gyazo.com/998891ac3a43372c96d5e382ebde7046, even when the item is selected it adds it rather than removing it. This is the script that selects the item:

local clicks = 0

script.Parent.Parent.MouseButton1Click:connect(function()
    clicks = clicks + 1
    local SelectedUnits = script.Parent.Parent.Parent.Parent.Parent.Units.SelectedUnits:GetChildren()
    local Selected = false
    if clicks/2 == math.floor(clicks/2) then
        Selected = true
    end
    if Selected == false then
        local Unit = Instance.new("StringValue")
        Unit.Name = script.Parent.Unit.Value
        Unit.Value = script.Parent.Unit.Value
        Unit.Parent = script.Parent.Parent.Parent.Parent.Parent.Units.SelectedUnits
        script.Parent.BorderSizePixel = 5
    elseif Selected == true then
        script.Parent.BorderSizePixel = 0
        local unit = script.Parent.Parent.Parent.Parent.Parent.Units.SelectedUnits:FindFirstChild(script.Parent.Unit.Value)
        unit:Destroy()
    end
end)

And this is the script that loads the selected items into the bottom selected item menu:

script.Parent.SelectedUnits.ChildAdded:connect(function()
    for number, thing in pairs (script.Parent:GetChildren()) do
        if thing:IsA("Frame") then
            for i,v in pairs (thing:GetChildren()) do
                v:Destroy()
            end
        end
    end
    local unitlist = {}
    local unitval = script.Parent.SelectedUnits:GetChildren()
    for i,v in pairs (unitval) do
        if v:IsA("StringValue") then
            table.insert(unitlist, v)
        end
    end
    local player = script.Parent.Parent.Parent.Parent
    wait(0.2)
    if unitlist[1] then
    for number, unitname in pairs (unitlist) do
        local unit = game.ServerStorage.UNITS[unitname.Name]
        local SpawnGui = game.ServerStorage.SpawnGui:Clone()
        SpawnGui.Parent = script.Parent["Unit"..number]
        SpawnGui.Unit.Value = unit.Name
        SpawnGui.Image = unit.Stats.RespawnGuiImageId.Value
        SpawnGui.BorderColor3 = unit.Stats.RespawnGuiBorderColor.Value
        SpawnGui.UnitName.TextColor3 = unit.Stats.RespawnGuiTextColor.Value
        SpawnGui.UnitName.TextStrokeColor3 = unit.Stats.RespawnGuiTextOutlineColor.Value
        SpawnGui.UnitName.Text = unit.Name
    end
    end
end)

script.Parent.SelectedUnits.ChildRemoved:connect(function()
    for number, thing in pairs (script.Parent:GetChildren()) do
        if thing:IsA("Frame") then
            for i,v in pairs (thing:GetChildren()) do
                v:Destroy()
            end
        end
    end
    local unitlist = {}
    local unitval = script.Parent.SelectedUnits:GetChildren()
    for i,v in pairs (unitval) do
        if v:IsA("StringValue") then
            table.insert(unitlist, v)
        end
    end
    local player = script.Parent.Parent.Parent.Parent
    wait(0.2)
    if unitlist[1] then
    for number, unitname in pairs (unitlist) do
        local unit = game.ServerStorage.UNITS[unitname.Value]
        local SpawnGui = game.ServerStorage.SpawnGui:Clone()
        SpawnGui.Parent = script.Parent["Unit"..number]
        SpawnGui.Unit.Value = unit.Name
        SpawnGui.Image = unit.Stats.RespawnGuiImageId.Value
        SpawnGui.BorderColor3 = unit.Stats.RespawnGuiBorderColor.Value
        SpawnGui.UnitName.TextColor3 = unit.Stats.RespawnGuiTextColor.Value
        SpawnGui.UnitName.TextStrokeColor3 = unit.Stats.RespawnGuiTextOutlineColor.Value
        SpawnGui.UnitName.Text = unit.Name
    end
    end
end)

These are the scrips that close and open the inventory:

script.Parent.MouseButton1Click:connect(function()
    if script.Parent.Parent.InventoryOpen.Value == false then
        script.Parent.Parent.InventoryOpen.Value = true
        script.Parent.Parent.Inventory.Visible = true
        script.Parent.Parent.SelectedUnitStats.Visible = true
        script.Parent.Parent.CloseButton.Visible = true
    end
end)

and

script.Parent.MouseButton1Click:connect(function()
    if script.Parent.Parent.InventoryOpen.Value == true then
        script.Parent.Parent.InventoryOpen.Value = false
        script.Parent.Parent.Inventory.Visible = false
        script.Parent.Parent.SelectedUnitStats.Visible = false
        script.Parent.Parent.CloseButton.Visible = false
    end
end)

And this is the script that loads the items in the inventory when it's opened or closed:

wait(5)

script.Parent.Parent.InventoryOpen.Changed:connect(function(vis)
    if vis == true then
        local unitlist = {}
        local unitval = game.ServerStorage.SAVEDDATA[script.Parent.Parent.Parent.Parent.Parent.Name].Units:GetChildren()
        for i,v in pairs (unitval) do
            unitlist[i] = v.Value
        end
        for number, unitname in pairs (unitlist) do
            local unit = game.ServerStorage.UNITS[unitname]
            local ItemGui = game.ServerStorage.InventoryItemGui:Clone()
            ItemGui.Name = unitname
            ItemGui.Parent = script.Parent
            local Ypos = ((number - 1)*83)
            ItemGui.Position = UDim2.new(0,10,0,Ypos)
            ItemGui.Frame.Unit.Value = unitname
            ItemGui.Frame.ImageLabel.Image = unit.Stats.RespawnGuiImageId.Value
            ItemGui.Frame.UnitName.Text = unitname
            ItemGui.Frame.UnitType.Text = unit.Stats.Type.Value
            ItemGui.Frame.UnitName.TextColor3 = unit.Stats.RespawnGuiTextColor.Value
            ItemGui.Frame.UnitName.TextStrokeColor3 = unit.Stats.RespawnGuiTextOutlineColor.Value
            ItemGui.Frame.BackgroundColor3 = unit.Stats.RespawnGuiBorderColor.Value
            if number/4 then
                script.Parent.CanvasSize = UDim2.new(0,0,(number/4 + 1),0)
            end
            local Selected = false
            for i,v in pairs (script.Parent.Parent.Parent.Units.SelectedUnits:GetChildren()) do
                if v.Value == unitname then
                    Selected = true
                end
            end
            if Selected == true then
                ItemGui.Frame.BorderSizePixel = 5
            end
        end
    end
end)

script.Parent.Parent.InventoryOpen.Changed:connect(function(vis)
    if vis == false then
        local units = script.Parent:GetChildren()
        for i,v in pairs (units) do
            if v:IsA("ImageButton") then
                v:Destroy()
            end
        end
    end
end)

I just have no idea how to fix this..

Answer this question