Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Made for version 3.0.3
- tArgs = {...}
- sides = {front = "front", back = "back", left = "left", right = "right", top = "top", bottom = "bottom"}
- local screenX, screenY = term.getSize()
- assert(screenY > 8 and screenX > 35, "Screen too small")
- local interval = 1
- if not term.isColor() then
- term.setTextColor = function() return false end
- term.setBackgroundColor = function() return false end; end
- local function output(text,xPos,yPos,doClear)
- term.setCursorPos(xPos,yPos); if doClear then term.clearLine() end
- io.write(text); return #text+2 end
- local errorMessage = "Improper Side"
- term.clear(); term.setCursorPos(1,1)
- if tArgs[1] then
- modemSide = assert(sides[tArgs[1]], errorMessage )
- else
- print("Modem Side?")
- modemSide = assert(sides[read()], errorMessage)
- end
- modem = peripheral.wrap(modemSide)
- local sender
- if tonumber(tArgs[2]) then
- sender = tonumber(tArgs[2])
- else
- print("Receiving channel? (Check the turtle)")
- sender = assert(tonumber(io.read()))
- end
- assert(sender == math.floor(sender), "Channel cannot be a decimal")
- assert(sender < 65535 and sender > 0, "Channel cannot be below 1 or above 65535")
- modem.open(sender)
- local relayMessage = "Confirm"
- local origRelayMessage = replyMessage
- local replyChannel, startDist
- term.clear()
- term.setCursorPos(1,1)
- print("Welcome to the Quarry Receiver Program!")
- print("Waiting for a turtle to send initial message")
- repeat
- local event, modemSide, sendChannel, repChannel, message, distance = os.pullEvent("modem_message")
- startDist = distance
- replyChannel = repChannel
- until sendChannel == sender and textutils.unserialize(message)
- local function sendMsg(message)
- modem.transmit(replyChannel, sender, message)
- end
- sendMsg(relayMessage)
- print("Now paired with turtle on Channel ",sender,". Sending back on Channel ",replyChannel)
- sleep(0.5)
- local function pullChar()
- while relayMessage ~= "stop" do
- --[[repeat
- local _, key = os.pullEvent("char")
- until key == "a" ]]
- sleep(0.5)
- output("Type Command\n",1,screenY-1,true)
- relayMessage = string.lower(io.read())
- end
- end
- local function main()
- local message
- local timeWaited = 0 --For seconds since last, may fix later
- term.clear()
- while message ~= "stop" do
- repeat
- local id = os.startTimer(interval)
- local event, idCheck, sendChannel, _, locMessage, distance = os.pullEvent()
- message = locMessage
- if (event == "timer" and idCheck == id) then timeWaited = timeWaited + interval else timeWaited = 0 end
- until (event == "modem_message" and idCheck == modemSide and sendChannel == sender) or (event == "timer" and idCheck == id)
- sendMsg(relayMessage)
- message = textutils.unserialize(message) or "stop"
- relayMessage = origRelayMessage
- if message ~= "stop" then
- output("Percent Complete: "..message.percent,1,1)
- output("Dimensions: ",1,2,true)
- output("Length X-"..message.x,1,3); output("Rows-"..message.z,18,3); output("Layers-"..message.y,30,3)
- output("Position in Row: "..message.xPos,1,4); output("Row this Layer: "..message.zPos,1,5); output("On Layer: "..math.ceil(message.yPos/3),1,6)
- local condition = (message.z == message.zPos) and (message.x == message.xPos)
- if condition then output("Going to next layer",1,7) elseif message.isInPath then output("",1,7,true) end
- if message.y == math.ceil(message.yPos/3) and condition then output("Going back to start",1,8) end
- if message.xPos == 0 then output("Calculating materials",1,9) end
- --output("Time since last message: "..timeWaited.." Seconds",1,7,true) --Broken
- output("Type Command\n",1,screenY-1)
- end
- end
- end
- local order = parallel.waitForAny(main, pullChar)
- modem.close(sender)
- term.setCursorPos(1,1)
- term.clear()
- local doneType
- if order == 1 then
- doneType = "Turtle Finished"
- messageT = textutils.unserialize(({os.pullEvent("modem_message")})[5])
- for i=1, #messageT do
- for a, b in pairs(messageT[i]) do
- print(a,b) end
- end
- else doneType = "Program Aborted" end
- error(doneType,0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement