180 lines
4.2 KiB
Lua
180 lines
4.2 KiB
Lua
local BioInd = require('common')('Bio_Industries')
|
|
|
|
if not thxbob.lib.item then thxbob.lib.item = {} end
|
|
|
|
|
|
function thxbob.lib.item.get_type(name)
|
|
local item_types = {
|
|
"ammo",
|
|
"armor",
|
|
"capsule",
|
|
"fluid",
|
|
"gun",
|
|
"item",
|
|
"mining-tool",
|
|
"module",
|
|
"tool",
|
|
"item-with-entity-data"
|
|
}
|
|
local item_type = nil
|
|
for i, type_name in pairs(item_types) do
|
|
if data.raw[type_name][name] then item_type = type_name end
|
|
end
|
|
return item_type
|
|
end
|
|
|
|
function thxbob.lib.item.get_basic_type(name)
|
|
local item_type = "item"
|
|
if data.raw.fluid[name] then item_type = "fluid" end
|
|
return item_type
|
|
end
|
|
|
|
|
|
function thxbob.lib.item.basic_item(inputs)
|
|
local item = {}
|
|
|
|
if inputs.name then
|
|
item.name = inputs.name
|
|
else
|
|
item.name = inputs[1]
|
|
end
|
|
|
|
if inputs.amount then
|
|
item.amount = inputs.amount
|
|
else
|
|
if inputs[2] then
|
|
item.amount = inputs[2]
|
|
end
|
|
end
|
|
if not item.amount then
|
|
item.amount = 1
|
|
end
|
|
|
|
if inputs.type then
|
|
item.type = inputs.type
|
|
else
|
|
item.type = thxbob.lib.item.get_basic_type(item.name)
|
|
end
|
|
|
|
if item.type == "item" then
|
|
if item.amount > 0 and item.amount < 1 then
|
|
item.amount = 1
|
|
else
|
|
item.amount = math.floor(item.amount)
|
|
end
|
|
end
|
|
|
|
return item
|
|
end
|
|
|
|
function thxbob.lib.item.item(inputs)
|
|
local item = {}
|
|
|
|
if inputs.name then
|
|
item.name = inputs.name
|
|
else
|
|
item.name = inputs[1]
|
|
end
|
|
|
|
if inputs.amount then
|
|
item.amount = inputs.amount
|
|
else
|
|
if inputs[2] then
|
|
item.amount = inputs[2]
|
|
end
|
|
end
|
|
if not item.amount then
|
|
if inputs.amount_min and inputs.amount_max then
|
|
item.amount_min = inputs.amount_min
|
|
item.amount_max = inputs.amount_max
|
|
else
|
|
item.amount = 1
|
|
end
|
|
end
|
|
if inputs.probability then item.probability = inputs.probability end
|
|
|
|
if inputs.type then
|
|
item.type = inputs.type
|
|
else
|
|
item.type = thxbob.lib.item.get_basic_type(item.name)
|
|
end
|
|
|
|
return item
|
|
end
|
|
|
|
|
|
function thxbob.lib.item.combine(item1_in, item2_in)
|
|
local item = {}
|
|
local item1 = thxbob.lib.item.item(item1_in)
|
|
local item2 = thxbob.lib.item.item(item2_in)
|
|
|
|
item.name = item1.name
|
|
item.type = item1.type
|
|
|
|
if item1.amount and item2.amount then
|
|
item.amount = item1.amount + item2.amount
|
|
elseif item1.amount_min and item1.amount_max and item2.amount_min and item2.amount_max then
|
|
item.amount_min = item1.amount_min + item2.amount_min
|
|
item.amount_max = item1.amount_max + item2.amount_max
|
|
else
|
|
if item1.amount_min and item1.amount_max and item2.amount then
|
|
item.amount_min = item1.amount_min + item2.amount
|
|
item.amount_max = item1.amount_max + item2.amount
|
|
elseif item1.amount and item2.amount_min and item2.amount_max then
|
|
item.amount_min = item1.amount + item2.amount_min
|
|
item.amount_max = item1.amount + item2.amount_max
|
|
end
|
|
end
|
|
|
|
if item1.probability and item2.probability then
|
|
item.probability = (item1.probability + item2.probability) / 2
|
|
elseif item1.probability then
|
|
item.probability = (item1.probability + 1) / 2
|
|
elseif item2.probability then
|
|
item.probability = (item2.probability + 1) / 2
|
|
end
|
|
|
|
return item
|
|
end
|
|
|
|
|
|
function thxbob.lib.item.add(list, item_in) --increments amount if exists
|
|
local item = thxbob.lib.item.item(item_in)
|
|
local addit = true
|
|
for i, object in pairs(list) do
|
|
if object[1] == item.name or object.name == item.name then
|
|
addit = false
|
|
list[i] = thxbob.lib.item.combine(object, item)
|
|
end
|
|
end
|
|
if addit then table.insert(list, item) end
|
|
end
|
|
|
|
function thxbob.lib.item.add_new(list, item_in) --ignores if exists
|
|
local item = thxbob.lib.item.item(item_in)
|
|
local addit = true
|
|
for i, object in pairs(list) do
|
|
if item.name == thxbob.lib.item.basic_item(object).name then addit = false end
|
|
end
|
|
if addit then
|
|
table.insert(list, item)
|
|
end
|
|
end
|
|
|
|
function thxbob.lib.item.remove(list, item)
|
|
for i, object in ipairs(list) do
|
|
if object[1] == item or object.name == item then
|
|
table.remove(list, i)
|
|
end
|
|
end
|
|
end
|
|
|
|
function thxbob.lib.item.set(list, item_in)
|
|
local item = thxbob.lib.item.item(item_in)
|
|
for i, object in pairs(list) do
|
|
if object[1] == item.name or object.name == item.name then
|
|
list[i] = item
|
|
end
|
|
end
|
|
end
|