MineOS/Applications/Robot/ReactorFiller.lua
Igor Timofeev ead0f5ea8c aef
2018-09-02 20:57:14 +03:00

88 lines
2.4 KiB
Lua

local component = require("component")
local sides = require("sides")
local robot = require("robot")
local event = require("event")
local serialization = require("serialization")
local inventory_controller = component.inventory_controller
local QUAD_FUEL = "IC2:reactorMOXQuad"
local DIAM_VENT = "IC2:reactorVentDiamond"
local IRON_VENT = "IC2:reactorVentSpread"
local STON_VENT = "IC2:reactorVent"
local GOLD_VENT = "IC2:reactorHeatSwitchSpread"
local RCTR_PLAT = "IC2:reactorPlating"
local allowed = {
[QUAD_FUEL] = true,
[DIAM_VENT] = true,
[IRON_VENT] = true,
[STON_VENT] = true,
[GOLD_VENT] = true,
[RCTR_PLAT] = true,
}
local map = {
DIAM_VENT, GOLD_VENT, DIAM_VENT, IRON_VENT, RCTR_PLAT, IRON_VENT, DIAM_VENT, GOLD_VENT, DIAM_VENT,
IRON_VENT, DIAM_VENT, QUAD_FUEL, DIAM_VENT, IRON_VENT, DIAM_VENT, QUAD_FUEL, DIAM_VENT, IRON_VENT,
STON_VENT, IRON_VENT, DIAM_VENT, IRON_VENT, DIAM_VENT, IRON_VENT, DIAM_VENT, IRON_VENT, STON_VENT,
GOLD_VENT, DIAM_VENT, IRON_VENT, DIAM_VENT, QUAD_FUEL, DIAM_VENT, IRON_VENT, DIAM_VENT, GOLD_VENT,
DIAM_VENT, QUAD_FUEL, DIAM_VENT, IRON_VENT, DIAM_VENT, IRON_VENT, DIAM_VENT, QUAD_FUEL, DIAM_VENT,
IRON_VENT, DIAM_VENT, GOLD_VENT, STON_VENT, IRON_VENT, STON_VENT, GOLD_VENT, DIAM_VENT, IRON_VENT,
}
local args = {...}
if args[1] == "fill" then
print("Filling...")
local filledMap = {}
for robotSlot = 1, robot.inventorySize() do
local stack = inventory_controller.getStackInInternalSlot(robotSlot)
if stack and allowed[stack.name] then
for mapSlot = 1, #map do
if map[mapSlot] == stack.name and not filledMap[mapSlot] then
robot.select(robotSlot)
print("Drop status", inventory_controller.dropIntoSlot(sides.front, mapSlot, 1))
filledMap[mapSlot] = true
break
end
end
end
end
elseif args[1] == "count" then
print("Checking...")
local need, have = {}, {}
for i = 1, #map do
need[map[i]] = (need[map[i]] or 0) + 1
end
for i = 1, robot.inventorySize() do
local stack = inventory_controller.getStackInInternalSlot(i)
if stack and allowed[stack.name] then
have[stack.name] = (have[stack.name] or 0) + stack.size
end
end
for key, value in pairs(need) do
local name = key:sub(12, -1)
if have[key] then
if have[key] < value then
print(name .. ": put " .. (value - (have[key] or 0)))
else
print(name .. ": OK, over " .. (have[key] - value))
end
else
print(name .. ": put " .. value)
end
end
end