SHOW:
|
|
- or go back to the newest paste.
| 1 | local ship = peripheral.find("warpdriveShipController")
| |
| 2 | local chat = peripheral.find("warpdriveVirtualAssistant")
| |
| 3 | ||
| 4 | -- Define chat name | |
| 5 | chat.name("[name")
| |
| 6 | ||
| 7 | local ship_front, ship_right, ship_up = ship.dim_positive() | |
| 8 | local ship_back, ship_left, ship_down = ship.dim_negative() | |
| 9 | local ship_isInHyper = ship.isInHyperspace() | |
| 10 | local ship_movement = { ship.movement() }
| |
| 11 | local ship_rotationSteps = ship.rotationSteps() | |
| 12 | ||
| 13 | print("Post Way Point in Chat to Jump Ship and Aligning the Mining Laser")
| |
| 14 | ||
| 15 | while true do | |
| 16 | sleep(0.08) | |
| 17 | - | sleep(0.08) |
| 17 | + | |
| 18 | - | local state = 0 |
| 18 | + | -- Check redstone input on a specific side (e.g., "back") |
| 19 | - | local CMD = 0 |
| 19 | + | if redstone.getInput("front") then
|
| 20 | - | state, CMD = chat.pullLastCommand() |
| 20 | + | local state, CMD = chat.pullLastCommand() |
| 21 | - | string = string.lower(CMD) |
| 21 | + | |
| 22 | - | |
| 22 | + | -- Use a new variable name instead of 'string' so as not to overwrite the library |
| 23 | - | -- Match and extract X and Z |
| 23 | + | local cmdText = string.lower(CMD or "") |
| 24 | - | local x_value, y_value, z_value = string:match(".*x:(%-?%d+),%s*y:(%-?%d+),%s*z:(%-?%d+)")
|
| 24 | + | |
| 25 | -- Match and extract coordinates; allow for negative numbers with %-? | |
| 26 | - | if state then |
| 26 | + | local x_value, y_value, z_value = cmdText:match(".*x:(%-?%d+),%s*y:(%-?%d+),%s*z:(%-?%d+)")
|
| 27 | - | if not (x_value and y_value and z_value) then |
| 27 | + | |
| 28 | - | print("Error: Coordinates not found in command.")
|
| 28 | + | if state then |
| 29 | - | else |
| 29 | + | if not (x_value and y_value and z_value) then |
| 30 | - | local lastLx = tonumber(x_value) |
| 30 | + | print("Error: Coordinates not found in command.")
|
| 31 | - | local lastLy = tonumber(y_value) -- if needed for future use |
| 31 | + | |
| 32 | - | local lastLz = tonumber(z_value) |
| 32 | + | else if not redstone.getInput("front") then
|
| 33 | - | |
| 33 | + | print("Inactive: Redstone was not active.")
|
| 34 | - | print("Jumping to X:" .. lastLx .. ", Z:" .. lastLz)
|
| 34 | + | |
| 35 | - | |
| 35 | + | local lastLx = tonumber(x_value) |
| 36 | - | local rx, ry, rz = ship.getOrientation() |
| 36 | + | local lastLy = tonumber(y_value) -- Currently not used; included for possible future use. |
| 37 | - | local minForwardBack = math.abs(ship_front + ship_back + 1) |
| 37 | + | local lastLz = tonumber(z_value) |
| 38 | - | local minLeftRight = math.abs(ship_left + ship_right + 1) |
| 38 | + | |
| 39 | - | local mx, my, mz = ship.getLocalPosition() |
| 39 | + | print("Jumping to X:" .. lastLx .. ", Z:" .. lastLz)
|
| 40 | - | |
| 40 | + | |
| 41 | - | local dx = lastLx - mx |
| 41 | + | local rx, ry, rz = ship.getOrientation() |
| 42 | - | local dz = lastLz - mz |
| 42 | + | local minForwardBack = math.abs(ship_front + ship_back + 1) |
| 43 | - | |
| 43 | + | local minLeftRight = math.abs(ship_left + ship_right + 1) |
| 44 | - | local forwardBackMov = 0 |
| 44 | + | local mx, my, mz = ship.getLocalPosition() |
| 45 | - | local leftRightMov = 0 |
| 45 | + | |
| 46 | - | |
| 46 | + | local dx = lastLx - mx |
| 47 | - | -- Determine movement based on ship's orientation. |
| 47 | + | local dz = lastLz - mz |
| 48 | - | if rx == 1 then |
| 48 | + | |
| 49 | - | forwardBackMov = dx |
| 49 | + | local forwardBackMov = 0 |
| 50 | - | leftRightMov = dz |
| 50 | + | local leftRightMov = 0 |
| 51 | - | elseif rx == -1 then |
| 51 | + | |
| 52 | - | forwardBackMov = -dx |
| 52 | + | -- Determine movement based on the ship's orientation. |
| 53 | - | leftRightMov = -dz |
| 53 | + | if rx == 1 then |
| 54 | - | elseif rz == 1 then |
| 54 | + | forwardBackMov = dx |
| 55 | - | forwardBackMov = dz |
| 55 | + | leftRightMov = dz |
| 56 | - | leftRightMov = -dx |
| 56 | + | elseif rx == -1 then |
| 57 | - | elseif rz == -1 then |
| 57 | + | forwardBackMov = -dx |
| 58 | - | forwardBackMov = -dz |
| 58 | + | leftRightMov = -dz |
| 59 | - | leftRightMov = dx |
| 59 | + | elseif rz == 1 then |
| 60 | forwardBackMov = dz | |
| 61 | - | |
| 61 | + | leftRightMov = -dx |
| 62 | - | if math.abs(forwardBackMov) < minForwardBack and math.abs(leftRightMov) < minLeftRight then |
| 62 | + | elseif rz == -1 then |
| 63 | - | print("The movement is too small!")
|
| 63 | + | forwardBackMov = -dz |
| 64 | leftRightMov = dx | |
| 65 | - | ship.movement(forwardBackMov, 0, leftRightMov) |
| 65 | + | end |
| 66 | - | ship.rotationSteps(0) |
| 66 | + | |
| 67 | - | ship.command("MANUAL", true)
|
| 67 | + | if math.abs(forwardBackMov) < minForwardBack and math.abs(leftRightMov) < minLeftRight then |
| 68 | print("The movement is too small!")
| |
| 69 | else | |
| 70 | - | end |
| 70 | + | ship.movement(forwardBackMov, 0, leftRightMov) |
| 71 | ship.rotationSteps(0) | |
| 72 | ship.command("MANUAL", true)
| |
| 73 | end | |
| 74 | end | |
| 75 | end | |
| 76 | end | |
| 77 | end | |
| 78 | end | |
| 79 |