Advertisement
jaklsfjlsak

遥控跳船 信号接收器 原型

Mar 23rd, 2025
426
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local ship = peripheral.find("warpdriveShipController")
  2.  
  3. local ship_front, ship_right, ship_up = ship.dim_positive()
  4. local ship_back, ship_left, ship_down = ship.dim_negative()
  5. local ship_isInHyper = ship.isInHyperspace()
  6. local ship_movement = { ship.movement() }
  7. local ship_rotationSteps = ship.rotationSteps()
  8.  
  9. -- Open rednet on the modem side (adjust "left" as needed)
  10. rednet.open("top")
  11.  
  12. print("Waiting for coordinate broadcasts when redstone is active on the front...")
  13.  
  14. while true do
  15.     -- Only process messages when redstone signal on the "front" is on.
  16.     if redstone.getInput("front") then
  17.         -- Use a timeout (0.5 seconds) so the call doesn't block indefinitely and allows rechecking the redstone state.
  18.         local senderID, message, protocol = rednet.receive("coordBroadcast", 0.5)
  19.        
  20.         if senderID then
  21.             if message and message.x and message.y and message.z then
  22.                 print("Received coordinates from computer " .. senderID .. ":")
  23.                 print("X: " .. message.x .. ", Y: " .. message.y .. ", Z: " .. message.z)
  24.  
  25.             local lastLx = tonumber(message.x)
  26.             local lastLy = tonumber(message.y)  -- if needed for future use
  27.             local lastLz = tonumber(message.z)
  28.            
  29.             print("Jumping to X:" .. lastLx .. ", Z:" .. lastLz)
  30.            
  31.             local rx, ry, rz = ship.getOrientation()
  32.             local minForwardBack = math.abs(ship_front + ship_back + 1)
  33.             local minLeftRight = math.abs(ship_left + ship_right + 1)
  34.             local mx, my, mz = ship.getLocalPosition()
  35.            
  36.             local dx = lastLx - mx
  37.             local dz = lastLz - mz
  38.            
  39.             local forwardBackMov = 0
  40.             local leftRightMov = 0
  41.            
  42.             -- Determine movement based on ship's orientation.
  43.             if rx == 1 then
  44.                 forwardBackMov = dx
  45.                 leftRightMov = dz
  46.             elseif rx == -1 then
  47.                 forwardBackMov = -dx
  48.                 leftRightMov = -dz
  49.             elseif rz == 1 then
  50.                 forwardBackMov = dz
  51.                 leftRightMov = -dx
  52.             elseif rz == -1 then
  53.                 forwardBackMov = -dz
  54.                 leftRightMov = dx
  55.             end
  56.            
  57.             if math.abs(forwardBackMov) < minForwardBack and math.abs(leftRightMov) < minLeftRight then
  58.                 print("The movement is too small!")
  59.             else
  60.                 ship.movement(forwardBackMov, 0, leftRightMov)
  61.                 ship.rotationSteps(0)
  62.                 ship.command("MANUAL", true)
  63.             end
  64.  
  65.            
  66.            
  67.             else
  68.                 print("Received invalid data from computer " .. senderID)
  69.             end
  70.         end
  71.     else
  72.         -- Optionally, you can print a message when redstone is off or simply sleep quietly.
  73.         -- print("Redstone is off on the front; not receiving messages.")
  74.         sleep(0.1)
  75.     end
  76. end
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement