Lua将项目添加到表格问题

时间:2015-05-11 04:37:05

标签: lua lua-table

以下功能的目标是检查容器是否有新商品的空间,如果有,请将商品添加到包含容器将其命名为另一个预先存在的项目的键/值或堆栈。

当项目需要更改其中一个键/值时出现问题,最终会将所有具有相同名称的项目更改为新键/值。

我无法找到任何迭代当前项目的代码并更改 quantity 之外的任何值,因此我假设添加新内容时出错项目,根据我的理解,函数中可能存在实例化或引用问题?虽然我对lua很新。

这是函数的控制台输出,添加了一些print()以提供更多上下文

Adding Item: knife
    Not Stackable
    Slot Found in: leg
    Item Added.
...
Current Items:
    knife   1   900 leg
...
Current Containers:
    chest   0
    leg     1
    back    0
    hand    0
...
Adding Item: twig
    Stackable
        No Stack Found.
    ...
    Slot Found in: leg
    Item Added.
...
Current Items:
    knife   1   900 leg
    twig    7   2   leg
...
Adding Item: knife
    Not Stackable
    Slot Found in: hand
    Item Added.
...
Current Items:
    knife   1   900 hand
    twig    7   2   leg
    knife   1   900 hand
...
Current Containers:
    chest   0
    leg     1
    back    0
    hand    1
...
Adding Item: knife
    Not Stackable
    Slot Not Found
    Item Not Added.
...

除了将新商品设置为同一个容器的所有其他商品外,所有内容似乎都有效。

传递项目的初始功能

local stackFree = checkStackFree(item)
local slotFree, slotContainer = checkSlotFree(item)

--If Item was Not Stacked
if not stackFree then
    --If Slot Free & Space Available
    if slotFree then
        item.container = slotContainer
        items[#items+1] = item

        containers:addItems(slotContainer,1)
        containers:addBulk(slotContainer,1)

        return true
    else
    --No Space for New Item
        return false
    end
    --New Item was Stacked
    return true
end

示例不可堆叠项目

{
    name = "knife",
    type = "weapon",
    qty = 1,
    stackable = false,
    bulk = 900
}

示例可堆叠项目(可堆叠项目在没有可用堆栈时执行相同的操作。)

{
    name = "twig",
    type = "misc",
    qty = 1,
    stackable = true,
    stackMax = 20,
    bulk = 900
}

checkStackFree()

--Check if New Item is Stackable
if item.stackable then
    --Iterate over Current Items
    for i,v in ipairs(items) do
        --Find a match
        if v.name == item.name then
            --Check Matching Item + New Item Quantity less than Max
            if v.qty+item.qty < v.stackMax then
                --Check Matching Item Container has Space
                if containers:getBulk(v.container)+(item.qty*item.bulk) < containers:getMaxBulk(v.container) then
                    --Modify Matching Item Quantity
                    v.qty = v.qty+item.qty
                    return true
                end
            end
        end
    end
end
return false

checkSlotFree()

--Check Current Items < Max Items
if containers:getItems("chest") < containers:getMaxItems("chest") then
    --Check Current Bulk + New Item Bulk < Max Bulk
    if containers:getBulk("chest")+item.bulk*item.qty < containers:getMaxBulk("chest") then
        return true, "chest"
    end
end
... repeat for other containers

--If no Containers already escaped, We're Full
return false, nill

我也尝试过没有成功table.insert(items, item),在阅读下面的链接之后听起来并不像在这种情况下表现不同。

http://lua-users.org/wiki/TablesTutorial

1 个答案:

答案 0 :(得分:1)

一切都有道理,我没有&#34;复制&#34;表格,更多只是参考。