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

Why does my inventory system not work properly? [SOLVED]

Asked by 5 years ago
Edited 5 years ago

For some reason, my inventory system acts as if there is something in the cell that it is checking when there isn't and it is blocking the player/looting system from placing it there, and on other occasions, it acts as if there isn't an item where one is

function logic:CheckCell(pos, index)
        for i, v in pairs(data.Inventory) do
            if i ~= index then
                if v.Position.X == pos.X or v.Position.Y == pos.Y then
                    return false
                end
                for _, v in pairs(v.OtherCells) do
                    if v.X == pos.X or v.Y == pos.Y then
                        return false
                    end
                end
            end
        end
        return true
    end

    function logic:CheckItemRoom(pos)
        for i, v in pairs(data.Inventory) do
            if v.Position.X == pos.X or v.Position.Y == pos.Y then
                return false
            end
            for _, v in pairs(v.OtherCells) do
                if v.X == pos.X or v.Y == pos.Y then
                    return false
                end
            end
        end
        return true
    end

    function logic:LootItem(item)
        local canloot = false
        print(item.Name)
        local itemData = require(replicatedStorage.ItemModules:FindFirstChild(item.Name))
        local posX,posY
        for x = 0,9-itemData.Size.X do
            for y = 0,9-itemData.Size.Y do
                local blocked = false
                print("Checking "..x..","..y)
                for ix = x,x+itemData.Size.X do
                    for iy = y,y+itemData.Size.Y do
                        if logic:CheckItemRoom(Vector2.new(ix,iy)) then
                            if blocked == false then
                                canloot = true
                            end
                            --print(ix..","..iy.." Is Clear")
                        else
                            --print(ix..","..iy.." Is Not Clear")
                            canloot = false
                            blocked = true
                        end
                    end
                end
                print(blocked)
                if not blocked then
                    break
                end
            end
        end
        if canloot then
            print("Chosen "..posX..","..posY)
            local othercells = {}
            for x = posX,posX+(itemData.Size.X) do
                for y = posY,posY+(itemData.Size.Y) do
                    table.insert(othercells, Vector2.new(x,y))
                end
            end
            local specialdata = {}
            if itemData.Type == "Gun" then
                specialdata.Rounds = item.Rounds
            end
            network:send('l'..'o'..'o'..'t'..'e'..'d', input.player, input.player, item.Part)
            table.insert(data.Inventory, {Name=item.Name,Position=Vector2.new(posX,posY), OtherCells=othercells, unpack(specialdata)})
            hud:updateInventory(data.Inventory)
        end
    end

Answer this question