jaklsfjlsak

gpt 生成测距仪

Apr 23rd, 2025 (edited)
398
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.17 KB | None | 0 0
  1. -- Improved WarpDrive Miner Control Script (fixed wrap error)
  2.  
  3. -- Initialization
  4. term.clear()
  5.  
  6. -- Find the laser peripheral (returns wrapped table)
  7. local laser = peripheral.find("warpdriveLaser")
  8. if not laser then
  9.   print("No warpdriveLaser detected")
  10.   return
  11. end
  12.  
  13. -- Find mining lasers by name and wrap them
  14. local miningLasers = {}
  15. for _, side in ipairs(peripheral.getNames()) do
  16.   if peripheral.getType(side) == "warpdriveMiningLaser" then
  17.     table.insert(miningLasers, peripheral.wrap(side))
  18.   end
  19. end
  20. if #miningLasers == 0 then
  21.   print("No warpdriveMiningLaser detected")
  22.   return
  23. end
  24.  
  25. -- Set the laser frequency
  26. laser.beamFrequency(1420)
  27.  
  28. -- Persistence helpers
  29. local function saveZeroLayersCount(cnt)
  30.   local f = fs.open("zero_layers.txt", "w")
  31.   f.write(tostring(cnt))
  32.   f.close()
  33. end
  34.  
  35. local function getZeroLayersCount()
  36.   if fs.exists("zero_layers.txt") then
  37.     local f = fs.open("zero_layers.txt", "r")
  38.     local c = tonumber(f.readAll())
  39.     f.close()
  40.     return c or 0
  41.   end
  42.   return 0
  43. end
  44.  
  45. print("Press 'M' to scan & start mining")
  46.  
  47. -- Main loop
  48. while true do
  49.   local _, key = os.pullEvent("key")
  50.   if key == keys.m then
  51.     -- Emit scan
  52.     local _, laserY = laser.getLocalPosition()
  53.     local targetY
  54.     repeat
  55.       laser.emitBeam(0, -1, 0)
  56.       os.sleep(1)
  57.       local x, y, z = laser.getScanResult()
  58.       targetY = z
  59.     until targetY ~= 0
  60.  
  61.     local offset = laserY - targetY - 1
  62.     print(("Offset: %d"):format(offset))
  63.  
  64.     -- Activate mining lasers
  65.     for _, ml in ipairs(miningLasers) do
  66.       ml.offset(offset)
  67.       ml.enable(true)
  68.     end
  69.  
  70.     -- Monitor and auto-stop after 3 empty layers
  71.     local zeros = getZeroLayersCount()
  72.     while true do
  73.       os.sleep(1)
  74.       local st, active, energy, layer, mined, total = miningLasers[1].state()
  75.       if total == 0 then zeros = zeros + 1 else zeros = 0 end
  76.       saveZeroLayersCount(zeros)
  77.       if zeros >= 3 then
  78.         print("3 empty layers → stopping mining")
  79.         for _, ml in ipairs(miningLasers) do ml.enable(false) end
  80.         fs.delete("zero_layers.txt")
  81.         break
  82.       end
  83.     end
  84.  
  85.     print("Press 'M' to scan & start mining")
  86.   end
  87. end
  88.  
Advertisement
Add Comment
Please, Sign In to add comment