InfOS/Programs/Autostocker/stockerUtil.lua
Sampsa 5d693800ca Fixed item ticker not clearing tickers on restart
Added check to itemstocker to detect server restart
Fixed autofeeder breaking on server restart
Added simple script to control turbines depending on battery level
2020-11-16 18:30:17 +02:00

80 lines
2.6 KiB
Lua

comp=require("component");screen=require("term");computer=require("computer");event=require("event"); thread = require("thread"); sides = require("sides")
get=require("utility"); ARG=require("ARGraphics"); G = require("graphics")
local uc = require("unicode"); tx = require("transforms")
config = require("config")
local GPU = comp.gpu
local sUtil = {}
function sUtil.refreshCraftables()
local c = comp.me_interface.getCraftables()
local max = 0
if max > 0 then
c = tx.sub(c, 1, max)
end
for i, craftable in pairs(c) do
if i ~= "n" then
if i % 10 == 0 then
G.centeredText(GPU, currentWindows["Number"].x+25, currentWindows["Number"].y*2+3, 0xFFFFFF, "Discovering Patterns: "..i.." / "..#c)
end
end
if craftable ~= #c then
craftables[craftable.getItemStack().label] = craftable.request
end
end
G.centeredText(GPU, 86, 85, 0xFFFFFF, "Patterns in memory: "..#c)
end
local cachedAmounts = {}
function sUtil.updateCache()
local itemList = interface.getItemsInNetwork()
for i = 1, #itemList, 1 do
if i % 200 == 0 then os.sleep() end
cachedAmounts[itemList[i].label] = itemList[i].size
itemList[i] = nil
end
end
function sUtil.getAmount(itemLabel)
if cachedAmounts[itemLabel] == nil then return 0 else return cachedAmounts[itemLabel] end
end
function sUtil.uniques()
return #cachedAmounts
end
function sUtil.update(label, oldAmount, newAmount)
local file = io.open("configured", 'r')
local fileContent = {}
local lineNumber = 0
local i = 1
for line in file:lines() do
if line == label..","..oldAmount then lineNumber = i end
table.insert (fileContent, line)
i = i + 1
end
io.close(file)
file = io.open("configured", 'w')
for index, value in ipairs(fileContent) do
if index ~= lineNumber then
file:write(value..'\n')
else
file:write(label..","..newAmount..'\n')
end
end
io.close(file)
end
function sUtil.addPattern(label, amount)
local file = io.open("configured", "a")
file:write(label..","..amount.."\n")
file:close()
itemsToStock[label] = amount
end
local function split(s, sep)
local fields = {}; local sep = sep or " "; local pattern = string.format("([^%s]+)", sep)
string.gsub(s, pattern, function(c) fields[#fields + 1] = c end)
return fields
end
function sUtil.loadPatterns()
local file = io.open("configured", "r")
for line in file:lines() do
local tokens = split(line, ",")
itemsToStock[tokens[1]] = tokens[2]
end
end
return sUtil