Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local modem = peripheral.wrap("back");
- local ids = {1069, 1070, 1071, 1072, 1073, 1074}
- local delay = 3.8
- local addX = function()
- modem.transmit(25810, 25810, textutils.serialize({id=ids[3], side="bottom", state=true}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[3], side="back", state=true}));
- os.sleep(delay);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[3], side="back", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[3], side="bottom", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[1], side="back", state=true}));
- os.sleep(delay);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[1], side="back", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="left", state=true}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="right", state=true}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="left", state=false}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="right", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[1], side="bottom", state=true}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[1], side="back", state=true}));
- os.sleep(delay);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[1], side="back", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[1], side="bottom", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="left", state=true}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="right", state=true}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="left", state=false}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="right", state=false}));
- os.sleep(0.1);
- end
- local subX = function()
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="left", state=true}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="right", state=true}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="left", state=false}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="right", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[1], side="back", state=true}));
- os.sleep(delay);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[1], side="back", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="left", state=true}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="right", state=true}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="left", state=false}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[2], side="right", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[1], side="bottom", state=true}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[1], side="back", state=true}));
- os.sleep(delay);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[1], side="back", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[1], side="bottom", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[3], side="back", state=true}));
- os.sleep(delay);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[3], side="back", state=false}));
- os.sleep(0.1);
- end
- local addZ = function()
- modem.transmit(25810, 25810, textutils.serialize({id=ids[6], side="bottom", state=true}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[6], side="back", state=true}));
- os.sleep(delay);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[6], side="back", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[6], side="bottom", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[4], side="back", state=true}));
- os.sleep(delay);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[4], side="back", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="left", state=true}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="right", state=true}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="left", state=false}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="right", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[4], side="bottom", state=true}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[4], side="back", state=true}));
- os.sleep(delay);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[4], side="back", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[4], side="bottom", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="left", state=true}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="right", state=true}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="left", state=false}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="right", state=false}));
- os.sleep(0.1);
- end
- local subZ = function()
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="left", state=true}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="right", state=true}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="left", state=false}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="right", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[4], side="back", state=true}));
- os.sleep(delay);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[4], side="back", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="left", state=true}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="right", state=true}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="left", state=false}));
- modem.transmit(25810, 25810, textutils.serialize({id=ids[5], side="right", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[4], side="bottom", state=true}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[4], side="back", state=true}));
- os.sleep(delay);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[4], side="back", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[4], side="bottom", state=false}));
- os.sleep(0.1);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[6], side="back", state=true}));
- os.sleep(delay);
- modem.transmit(25810, 25810, textutils.serialize({id=ids[6], side="back", state=false}));
- os.sleep(0.1);
- end
- local filename = "data.txt"
- -- Function to initialize or reset data.txt with default values for current and target coordinates
- local function initializeFile()
- local file = fs.open(filename, "w")
- file.writeLine("0") -- Current x
- file.writeLine("0") -- Current z
- file.writeLine("0") -- Target x
- file.writeLine("0") -- Target z
- file.close()
- end
- -- Read coordinates from data.txt
- local function readCoordinates()
- if not fs.exists(filename) then
- initializeFile()
- end
- local file = fs.open(filename, "r")
- local currentX = tonumber(file.readLine())
- local currentZ = tonumber(file.readLine())
- local targetX = tonumber(file.readLine())
- local targetZ = tonumber(file.readLine())
- file.close()
- return currentX, currentZ, targetX, targetZ
- end
- -- Write coordinates to data.txt
- local function writeCoordinates(currentX, currentZ, targetX, targetZ)
- local file = fs.open(filename, "w")
- file.writeLine(tostring(currentX))
- file.writeLine(tostring(currentZ))
- file.writeLine(tostring(targetX))
- file.writeLine(tostring(targetZ))
- file.close()
- end
- -- Movement functions that handle modem communication and update current coordinates
- local currentX, currentZ, targetX, targetZ = readCoordinates()
- -- Main function to handle logic and control flow
- local function main()
- -- Check if stepping is needed
- if currentX ~= targetX or currentZ ~= targetZ then
- print("C: "..currentX.." "..currentZ.." T: "..targetX.." "..targetZ)
- if currentX < targetX then
- addX()
- currentX = currentX + 2
- elseif currentX > targetX then
- subX()
- currentX = currentX - 2
- elseif currentZ < targetZ then
- addZ()
- currentZ = currentZ + 2
- elseif currentZ > targetZ then
- subZ()
- currentZ = currentZ - 2
- end
- writeCoordinates(currentX, currentZ, targetX, targetZ)
- return "continue"
- else
- -- Wait for new input when target coordinates are reached
- term.clear()
- term.setCursorPos(1, 1)
- print("C: "..currentX.." "..currentZ.." T: "..targetX.." "..targetZ)
- print("Enter new target:")
- local input = io.read()
- local args = {}
- for arg in string.gmatch(input, "%S+") do
- table.insert(args, arg)
- end
- -- Helper function to round a number towards zero to the nearest even number
- local function roundToEven(n)
- return n % 2 == 0 and n or (n > 0 and (n - 1) or (n + 1))
- end
- -- Parsing and adjusting target coordinates
- if args[1] == "r" and #args == 3 then
- -- Relative coordinates: adjust inputs to be even if necessary
- local deltaX = tonumber(args[2])
- local deltaZ = tonumber(args[3])
- targetX = currentX + roundToEven(deltaX)
- targetZ = currentZ + roundToEven(deltaZ)
- elseif #args == 2 then
- -- Absolute coordinates: round to the nearest even number towards zero
- targetX = roundToEven(tonumber(args[1]))
- targetZ = roundToEven(tonumber(args[2]))
- else
- print("Invalid command. Please use the format '123 456' for absolute or 'r 4 -2' for relative with even values only.")
- return "continue"
- end
- writeCoordinates(currentX, currentZ, targetX, targetZ)
- return "continue"
- end
- end
- term.clear()
- term.setCursorPos(1, 1)
- -- Main loop to execute the main function and handle its status
- while true do
- local status = main()
- if status == "continue" then
- -- Continue executing
- elseif status == "break" then
- break
- else
- print("Unknown return status.")
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement