Added item extractor script.
This commit is contained in:
parent
b2f7879472
commit
50d1d8f662
|
@ -3,8 +3,8 @@
|
|||
dub clean
|
||||
dub build --build=release
|
||||
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."
|
||||
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."
|
||||
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