Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local args = {...}
- local jarReScanDelay = 30
- local jars = {}
- local jarMaxAmount = 64
- local wifi = nil
- local channel = 42
- if #args > 0 then channel = tonumber(args[1]) end
- local guiChannel = #args > 1 and tonumber(args[2]) or 46
- local function scanConnections()
- local numJars = 0
- local devList = peripheral.getNames()
- for _,dev in pairs(devList) do
- if peripheral.getType(dev) == "tilejarvoid" then
- local jar = peripheral.wrap(dev)
- if jar then jars[#jars+1] = {dev=jar, name=dev}; numJars = numJars + 1 end
- elseif peripheral.getType(dev) == "modem" and peripheral.call(dev,"isWireless") then wifi = peripheral.wrap(dev)
- end
- end
- return {njars=numJars}
- end
- local function scanJars()
- for _,jar in pairs(jars) do
- if jar.dev and jar.dev.getAspects() and jar.dev.getAspects()[1] then
- if jar.dev.getAspects()[1].quantity < jarMaxAmount then
- print(jar.dev.getAspects()[1].quantity," ",string.lower(jar.dev.getAspects()[1].name))
- --call turtle
- if wifi then
- local event, modemSide, senderChannel, replyChannel, message, senderDistance = nil, nil, nil, nil, nil, nil
- local again = true
- local timeOut
- repeat
- if again then
- timeOut = os.startTimer(15)
- wifi.transmit(channel,channel,textutils.serialize({string.lower(jar.dev.getAspects()[1].name),jarMaxAmount-jar.dev.getAspects()[1].quantity}))
- end
- again = false
- event, modemSide, senderChannel, replyChannel, message, senderDistance = os.pullEvent()
- if event == "modem_message" and senderChannel == channel then
- local msg = textutils.unserialize(message)
- print(msg, " of ", jarMaxAmount-jar.dev.getAspects()[1].quantity, " requested beans moved")
- elseif event == "modem_message" and senderChannel == guiChannel then
- --os.queueEvent(event, side, senderChannel, replyChannel, message, senderDistance)
- elseif event == "timer" and modemSide == timeOut then again = true
- end
- until event == "modem_message" and senderChannel == channel
- else print("no wireless modem found")
- end
- end
- end
- end
- end
- local function getJars()
- local myJars = {}
- for _,jar in pairs(jars) do
- if jar.dev and jar.dev.getAspects() and jar.dev.getAspects()[1] then
- myJars[string.lower(jar.dev.getAspects()[1].name)] = jar.dev.getAspects()[1].quantity
- end
- end
- return myJars
- end
- print(scanConnections().njars, " connected jars")
- if wifi then
- print("Opening wifi channel ",channel)
- wifi.open(channel)
- print("Opening wifi channel ",guiChannel)
- wifi.open(guiChannel)
- else return 0
- end
- local timer
- local function scanLoop()
- scanJars()
- timer = os.startTimer(jarReScanDelay)
- while true do
- local event, side, senderChannel, replyChannel, message, senderDistance = os.pullEvent()
- if event == "timer" and side == timer then
- scanJars()
- timer = os.startTimer(jarReScanDelay)
- --elseif event == "modem_message" then
- end
- end
- end
- local function answerGUI()
- while true do
- local event, side, senderChannel, replyChannel, message, senderDistance = os.pullEvent("modem_message")
- if senderChannel == guiChannel then
- wifi.transmit(guiChannel,guiChannel,getJars())
- else
- --os.queueEvent(event, side, senderChannel, replyChannel, message, senderDistance)
- end
- end
- end
- parallel.waitForAny(scanLoop,answerGUI)
Advertisement
Add Comment
Please, Sign In to add comment