Advertisement
RobinJut

move.lua

Jul 18th, 2024 (edited)
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.73 KB | None | 0 0
  1. -- https://pastebin.com/P2WK5w2E
  2.  
  3. local version = "3.0"
  4.  
  5. function move(direction)
  6.   if direction == "up" then
  7.  
  8.     while turtle.up() == false do
  9.       turtle.digUp()
  10.       turtle.attackUp()
  11.     end
  12.  
  13.   elseif direction == "forward" then
  14.  
  15.     while turtle.forward() == false do
  16.       turtle.dig()
  17.       turtle.attack()
  18.     end
  19.  
  20.   elseif direction == "down" then
  21.  
  22.     while turtle.down() == false do
  23.       turtle.digDown()
  24.       turtle.attackDown()
  25.     end
  26.   end
  27. end
  28. -- Force move up/forward/down with this function
  29.  
  30. status = {move = 1,cube = 1,pasillo = 1}
  31.  
  32. helpTable = {move = "move in any direction", cube = "mine out a cuboid in dimension arguments", tunel = "tunel 2 de alto con vallas laterales si hay vallas en inventario"}
  33.  
  34. functionTable = {
  35.  
  36.     tunel = function(item,connectID,mProt)
  37.       moveBlocks = tonumber(item[1])
  38.  
  39.       if moveBlocks == nil then
  40.         moveBlocks = 0
  41.       end
  42.       rednet.send(connectID, "Tunelando " .. moveBlocks.." bloques", mProt);
  43.  
  44.       function isFence(item)
  45.         if(item ~= nil and string.find(item.name, "glass")) then return true else return false end
  46.       end
  47.  
  48.       function selectItem(fence)
  49.         local pos = 0;
  50.         local found = false;
  51.         local item = turtle.getItemDetail(turtle.getSelectedSlot());
  52.         if(item == nil or isFence(item) ~= fence) then
  53.           for i=1,16,1
  54.           do
  55.             item = turtle.getItemDetail(i);
  56.             if(item ~= nil) then
  57.  
  58.               if(pos == 0) then pos = i; end
  59.  
  60.               if(isFence(item) == fence) then
  61.                 turtle.select(i);
  62.                 found = true;
  63.                 break;
  64.               end
  65.             end
  66.           end
  67.           if(not found) then
  68.             if(pos == 0) then
  69.               rednet.send(connectID, "No tengo bloques", mProt);
  70.             else
  71.               turtle.select(pos);
  72.             end
  73.           end
  74.         end
  75.       end
  76.  
  77.       for i=1,moveBlocks,1
  78.       do
  79.         turtle.digUp();
  80.         turtle.dig();
  81.  
  82.         selectItem(false);
  83.         turtle.placeDown();
  84.  
  85.         selectItem(true);
  86.         turtle.turnLeft();
  87.         turtle.place();
  88.  
  89.         turtle.up();
  90.         turtle.place();
  91.         selectItem(false);
  92.         turtle.placeUp();
  93.  
  94.        
  95.         selectItem(true);
  96.         turtle.turnRight();
  97.         turtle.turnRight();
  98.         turtle.place();
  99.         turtle.down();
  100.         turtle.place();
  101.  
  102.         turtle.turnLeft();
  103.         if(turtle.getFuelLevel() < 6) then
  104.           rednet.send(connectID, "Low fuel: "..turtle.getFuelLevel(), mProt);
  105.           break;
  106.         end
  107.         turtle.forward();
  108.         rednet.send(connectID, "Tunel: " ..i.." bloques", mProt);
  109.       end
  110.     end,
  111.  
  112.  
  113.     move = function(item,connectID,mProt)
  114.  
  115.     moveBlocks = tonumber(item[2])
  116.  
  117.     if moveBlocks == nil then
  118.       moveBlocks = 0
  119.     end
  120.  
  121.     if not tonumber(moveBlocks) then
  122.       rednet.send(connectID, "Expected number as 3rd argument. Instead Received: " .. item[2], mProt)
  123.     else
  124.  
  125.       function mover(direction)
  126.         while moveBlocks > 0 do
  127.           move(direction)
  128.           moveBlocks = moveBlocks - 1
  129.         end
  130.       end
  131.  
  132.       if item[1] == "up" or item[1] == "down" or item[1] == "forward" or item[1] == "right" or item[1] == "left" or item[1] == "back" then
  133.         if moveBlocks > 1 then
  134.           rednet.send(connectID, "Moving " .. item[1] .. " " .. item[2] .. " blocks!", mProt)
  135.         elseif moveBlocks == 1 then
  136.           rednet.send(connectID, "Moving " .. item[1] .. " 1 block", mProt)
  137.         else
  138.           rednet.send(connectID, "Moving " .. item[1], mProt)
  139.         end
  140.  
  141.         if item[1] == "right" then
  142.           turtle.turnRight()
  143.           item[1] = "forward"
  144.  
  145.         elseif item[1] == "left" then
  146.           turtle.turnLeft()
  147.           item[1] = "forward"
  148.  
  149.         elseif item[1] == "back" then
  150.           for i=1,2 do turtle.turnRight() end
  151.           item[1] = "forward"
  152.         end
  153.  
  154.         mover(item[1])
  155.  
  156.       else
  157.         rednet.send(connectID, 'List of possible directions: "up", "down", "right", "left", "forward", "back" ', mProt)
  158.  
  159.       end
  160.     end
  161.   end,
  162.  
  163.   cube = function(item,connectID,mProt)
  164.  
  165.     if item[1] ~= nil and item[2] ~= nil and item[3] ~= nil and tonumber(item[1]) and tonumber(item[2]) and tonumber(item[3]) and tonumber(item[1]) > 0 and tonumber(item[2]) > 0 and tonumber(item[3]) > 0 then
  166.  
  167.       for i=1,3 do
  168.         item[i] = tonumber(item[i])
  169.       end
  170.  
  171.       rednet.send(connectID, "Mining out a " .. item[1] .. " x " .. item[2] .. " x " .. item[3] .. " cuboid", mProt)
  172.       local xDist = item[1]
  173.       local yDist = item[2]
  174.       local zDist = item[3]
  175.       local i = 0
  176.       local levelsMined = 0
  177.  
  178.       function checkBreak()
  179.         if yDist - levelsMined > 1 then
  180.  
  181.           turtle.digUp()
  182.         end
  183.  
  184.         if yDist - levelsMined > 2 then
  185.  
  186.           turtle.digDown()
  187.         end
  188.       end
  189.  
  190.       function line()
  191.         for k=1,xDist-1 do
  192.  
  193.           move("forward")
  194.           checkBreak()
  195.         end
  196.       end
  197.  
  198.       function nextLine(direction)
  199.         direction()
  200.         move("forward")
  201.         checkBreak()
  202.         direction()
  203.       end
  204.  
  205.       function layer(level)
  206.  
  207.         if yDist - levelsMined > 2 then
  208.  
  209.           move("up")
  210.         end
  211.  
  212.         checkBreak()
  213.         line()
  214.  
  215.         if zDist%2 == 1 then
  216.  
  217.           level = 0
  218.         end
  219.  
  220.         for j=1,zDist-1 do
  221.           if (level+j)%2 == 1 then
  222.  
  223.             nextLine(turtle.turnRight)
  224.           else
  225.  
  226.             nextLine(turtle.turnLeft)
  227.           end
  228.  
  229.           line()
  230.         end
  231.  
  232.         if yDist - levelsMined > 2 then
  233.  
  234.           levelsMined = levelsMined + 3
  235.  
  236.         elseif yDist - levelsMined > 1 then
  237.  
  238.           levelsMined = levelsMined + 2
  239.         else
  240.  
  241.           levelsMined = levelsMined + 1
  242.         end
  243.       end
  244.  
  245.       move("forward")
  246.       layer(0)
  247.       local level = 0
  248.  
  249.       while yDist - levelsMined > 0 do
  250.  
  251.         for l=1,2 do move("up") end
  252.         for l=1,2 do turtle.turnRight() end
  253.  
  254.         level = level + 1
  255.         layer(level)
  256.       end
  257.  
  258.       local rightTurns = 2
  259.  
  260.       if level%2 == 0 then
  261.         if zDist%2 == 1 then
  262.  
  263.           for i=1,2 do turtle.turnRight() end
  264.           for i=1,xDist-1 do move("forward") end
  265.         end
  266.  
  267.         turtle.turnRight()
  268.         for i=1,zDist-1 do move("forward") end
  269.         rightTurns = 1
  270.       end
  271.  
  272.       local yOffset = 2
  273.  
  274.       if yDist % 3 == 1 then yOffset = 1 end
  275.  
  276.       for i=1,yDist-yOffset do move("down") end
  277.       for i=1,rightTurns do turtle.turnRight() end
  278.     else
  279.  
  280.       rednet.send(connectID, "Invalid dimensions, use 3 numbers bigger than 0", mProt)
  281.     end
  282.   end
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement