以下功能的目标是检查容器是否有新商品的空间,如果有,请将商品添加到包含容器将其命名为另一个预先存在的项目的键/值或堆栈。
当项目需要更改其中一个键/值时出现问题,最终会将所有具有相同名称的项目更改为新键/值。
我无法找到任何迭代当前项目的代码并更改 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)
,在阅读下面的链接之后听起来并不像在这种情况下表现不同。
答案 0 :(得分:1)
一切都有道理,我没有&#34;复制&#34;表格,更多只是参考。