Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --#requires
- local fs = require("filesystem")
- local serialization = require("serialization")
- local term = require("term")
- local component = require("component")
- local event = require("event")
- --#variables
- config = {}
- miners = {}
- local mineAll = false
- local sw = "main"
- local isMining = false
- local running = true
- local string_stat = ""
- function main()
- find_peripherals()
- read_config()
- event.listen("key_down",listen)
- while running do
- draw_main()
- if isMining then
- draw_stats()
- end
- end
- end
- function draw_stats()
- local runcheck
- while isMining do
- runcheck = false
- string_stat = ""
- for k, miner in pairs(miners) do
- status, isActive, _, currentLayer, _, _ = miner.state()
- string_stat = string_stat .. "Laser #" .. k .. " " .. status .. " at layer " .. currentLayer .. "\n"
- runcheck = runcheck or isActive
- end
- string_stat = string_stat .. "[S]top"
- term.clear()
- term.write(string_stat)
- isMining = runcheck
- switch_chk()
- os.sleep(1)
- end
- end
- function draw_main()
- while not isMining and running do
- term.clear()
- sw = "main"
- if mineAll then oq = "quarry" else oq = "ores" end
- string_stat = "[T]oggle ores/quarry: " .. oq .. "\nSet layer [o]ffset: " .. config.layerOffset .. "\n[S]tart " .. " E[x]it" -- 20, 24, 31, 45
- term.write(string_stat)
- os.sleep(1)
- switch_chk()
- end
- end
- function setOffset()
- term.clear()
- print("Set layer offset (current " .. config.layerOffset.."):")
- while true do
- lo = tonumber(term.read())
- if lo == nil or lo<0 or lo>250 then
- term.write("Wrong input. Try again.")
- else
- config.layerOffset = lo
- break
- end
- end
- save_config()
- sw = "main"
- end
- function toggleWork()
- if isMining then
- term.clear()
- term.write("-Stopping miners-")
- for _, miner in pairs(miners) do
- miner.stop()
- end
- isMining = false
- os.sleep(0.5)
- else
- term.clear()
- term.write("-Starting miners-")
- for _, miner in pairs(miners) do
- miner.offset(config.layerOffset)
- miner.onlyOres(not mineAll)
- miner.start()
- end
- isMining = true
- os.sleep(0.5)
- end
- sw = "main"
- end
- function switch_chk()
- if sw == "toggleWork" then toggleWork()
- elseif sw == "toggleMineAll" and not isMining then mineAll = not mineAll
- elseif sw == "setOffset" and not isMining then setOffset()
- end
- end
- function listen(_,_,_,code,_)
- if code == 31 then sw = "toggleWork"
- elseif code == 20 then sw = "toggleMineAll"
- elseif code == 24 then sw = "setOffset"
- elseif code == 45 and not isMining and sw == "main" then running = false
- end
- end
- function create_config()
- config.layerOffset = 1
- save_config()
- main()
- end
- function find_peripherals()
- for addr, _ in pairs(component.list("warpdriveMiningLaser")) do
- table.insert(miners, component.proxy(addr))
- end
- end
- function read_config()
- local file = io.open("/etc/openMiners.cfg","r")
- local c = serialization.unserialize(file:read(fs.size("/etc/openMiners.cfg")))
- file:close()
- for k,v in pairs(c) do
- config[k] = v
- end
- end
- function save_config()
- local file = io.open("/etc/openMiners.cfg","w")
- file:write(serialization.serialize(config,false))
- file:close()
- end
- --#init
- if not fs.exists("/etc/openMiners.cfg") then
- create_config()
- else
- main()
- end
- event.ignore("key_down",listen)
- term.clear()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement