Added item extractor script.
This commit is contained in:
parent
b2f7879472
commit
50d1d8f662
|
@ -3,8 +3,8 @@
|
||||||
dub clean
|
dub clean
|
||||||
dub build --build=release
|
dub build --build=release
|
||||||
echo "Stopping CSGS service."
|
echo "Stopping CSGS service."
|
||||||
ssh -f root@134.209.223.55 'systemctl stop csgs'
|
ssh -f root@andrewlalis.com 'systemctl stop csgs'
|
||||||
echo "Uploading new binary."
|
echo "Uploading new binary."
|
||||||
scp create-schematic-gen-site root@134.209.223.55:/opt/create-schematic-gen-site/
|
scp create-schematic-gen-site root@andrewlalis.com:/opt/create-schematic-gen-site/
|
||||||
echo "Starting CSGS service."
|
echo "Starting CSGS service."
|
||||||
ssh -f root@134.209.223.55 'systemctl start csgs'
|
ssh -f root@andrewlalis.com 'systemctl start csgs'
|
||||||
|
|
|
@ -0,0 +1,152 @@
|
||||||
|
local me = peripheral.wrap("back")
|
||||||
|
local EXPORT_SIDE = "south"
|
||||||
|
|
||||||
|
local args = {...}
|
||||||
|
|
||||||
|
local function starts_with(str, start)
|
||||||
|
return str:sub(1, #start) == start
|
||||||
|
end
|
||||||
|
|
||||||
|
local function ends_with(str, ending)
|
||||||
|
return ending == "" or str:sub(-#ending) == ending
|
||||||
|
end
|
||||||
|
|
||||||
|
local function waitForEnter()
|
||||||
|
print("Press [Enter] to continue.")
|
||||||
|
io.read()
|
||||||
|
end
|
||||||
|
|
||||||
|
local function isAEOnline()
|
||||||
|
local usage, err = me.getEnergyUsage()
|
||||||
|
return usage ~= nil and usage > 0
|
||||||
|
end
|
||||||
|
|
||||||
|
local function fetchItemLists(url)
|
||||||
|
local request = http.get(url)
|
||||||
|
if request == nil then
|
||||||
|
print("HTTP request failed. Please contact the administrator.")
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
if request.getResponseCode() ~= 200 then
|
||||||
|
print("HTTP error code " .. request.getResponseCode() .. " Your link is likely incorrect.")
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
local itemListText = request.readAll()
|
||||||
|
request.close()
|
||||||
|
local itemLists, msg = textutils.unserializeJSON(itemListText)
|
||||||
|
if not itemLists then
|
||||||
|
print("Failed to parse item-list JSON: " .. msg)
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
return itemLists
|
||||||
|
end
|
||||||
|
|
||||||
|
local function findItem(items, name)
|
||||||
|
for _, item in pairs(items) do
|
||||||
|
if item.name == name then
|
||||||
|
return item
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local function attemptItemExport(name, count, side)
|
||||||
|
local func = function()
|
||||||
|
return me.exportItem(
|
||||||
|
{
|
||||||
|
name=name,
|
||||||
|
count=count
|
||||||
|
},
|
||||||
|
side
|
||||||
|
)
|
||||||
|
end
|
||||||
|
local success, result = pcall(func)
|
||||||
|
if success then
|
||||||
|
return result
|
||||||
|
else
|
||||||
|
return nil, result
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function exportItem(name, count)
|
||||||
|
print("Exporting " .. count .. "x " .. name)
|
||||||
|
local totalTransferred = 0
|
||||||
|
while totalTransferred < count do
|
||||||
|
local amountToTransfer = count - totalTransferred
|
||||||
|
local items = me.listItems()
|
||||||
|
local item = findItem(items, name)
|
||||||
|
if item ~= nil and item.amount > 0 then
|
||||||
|
local count, err = attemptItemExport(name, amountToTransfer, EXPORT_SIDE)
|
||||||
|
if count ~= nil then
|
||||||
|
print(" Transferred " .. count .. " items.")
|
||||||
|
totalTransferred = totalTransferred + count
|
||||||
|
if count == 0 then
|
||||||
|
print(" Couldn't transfer any items. Please ensure there's space available for exporting.")
|
||||||
|
waitForEnter()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
print(" Transfer failed: " .. err)
|
||||||
|
waitForEnter()
|
||||||
|
end
|
||||||
|
-- elseif craftableItem ~= nil and not startedCraftingRecently then
|
||||||
|
-- print(" No more items in the system; would you like to attempt to auto-craft " .. amountToTransfer .. " more?[yes/no]")
|
||||||
|
-- local response = io.read()
|
||||||
|
-- if response == "yes" then
|
||||||
|
-- me.craftItem({name=name, count=amountToTransfer})
|
||||||
|
-- startedCraftingRecently = true
|
||||||
|
-- while me.isItemCrafting({name=name}) do
|
||||||
|
-- print(" Crafting in progress...")
|
||||||
|
-- os.sleep(0.5)
|
||||||
|
-- end
|
||||||
|
-- end
|
||||||
|
else
|
||||||
|
print(" Item doesn't exist in the system. Please add " .. amountToTransfer .. " of this item to the system, or type\"skip\" to skip this item.")
|
||||||
|
local response = io.read()
|
||||||
|
if response == "skip" then
|
||||||
|
-- "skip" by pretending the items were exported.
|
||||||
|
totalTransferred = totalTransferred + amountToTransfer
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function exportSchematic(schematic)
|
||||||
|
print("Exporting schematic\n \"" .. schematic.__NAME__ .. "\"")
|
||||||
|
for i = 1, schematic.__COUNT__ do
|
||||||
|
print("Iteration " .. i .. "/" .. schematic.__COUNT__ .. ":")
|
||||||
|
for name, count in pairs(schematic) do
|
||||||
|
if not (starts_with(name, "__") and ends_with(name, "__")) then
|
||||||
|
exportItem(name, count)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function exportItemList(itemList)
|
||||||
|
print("Exporting items for schematic:\n\t" .. itemList.__NAME__)
|
||||||
|
for name, count in pairs(itemList) do
|
||||||
|
exportItem(name, count)
|
||||||
|
end
|
||||||
|
print("Done!")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- MAIN SCRIPT
|
||||||
|
if not isAEOnline() then
|
||||||
|
print("Could not connect to the AE system.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
-- Check URL
|
||||||
|
if #args < 1 or not http.checkURL(args[1]) then
|
||||||
|
print("Missing or invalid item-list URL.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local itemLists = fetchItemLists(args[1])
|
||||||
|
if itemLists == nil then
|
||||||
|
print("Failed to retrieve item-list. Exiting.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
for idx, itemList in pairs(itemLists) do
|
||||||
|
exportSchematic(itemList)
|
||||||
|
end
|
Loading…
Reference in New Issue