Advertisement
ivan52

Digger_Turtle

Jan 29th, 2018
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.11 KB | None | 0 0
  1. local a = {...}
  2.  
  3. local num_of_lines_x = tonumber(a[1])
  4. local num_of_blocks_z = tonumber(a[2])
  5. local num_of_layers_y = tonumber(a[3]) / 3
  6. a = nil
  7.  
  8. local num_all = num_of_lines_x * num_of_blocks_z - 1
  9. local numRub, saplingName = _, 16
  10.  
  11. -- =============================== Н А В И Г  А Ц И Я ============================== --
  12. local x, z, y, b, dx ,dz  = 0, 0, 0, 0, 0, 1
  13. local function forward(num)
  14.     if not num then num = 1 end
  15.     for i = 1, num do
  16.         while not turtle.forward() do turtle.attack() turtle.dig() end
  17.     end
  18.     x = x + dx * num
  19.     z = z + dz * num
  20. end
  21. local function turnLeft()
  22.     b = (b + 3)%4
  23.     turtle.turnLeft()
  24.     if b == 0 then dz = 1; dx = 0
  25.     elseif b == 1 then dx = 1; dz = 0
  26.     elseif b == 2 then dz = -1; dx = 0
  27.     else dx = -1; dz = 0 end
  28. end
  29. local function turnRight()
  30.     b = (b + 1)%4
  31.     turtle.turnRight()
  32.     if b == 0 then dz = 1; dx = 0
  33.     elseif b == 1 then dx = 1; dz = 0
  34.     elseif b == 2 then dz = -1; dx = 0
  35.     else dx = -1; dz = 0 end
  36. end
  37. local function turnAround()
  38.     b = (b + 2)%4
  39.     for i = 1, 2 do
  40.         turtle.turnLeft()
  41.     end
  42.     dx = dx * (-1)
  43.     dz = dz * (-1)
  44. end
  45. local function turn(side)
  46.     if side == 0 and b == 3 then
  47.         turtle.turnRight()
  48.         b = side
  49.     elseif side == 3 and b == 0 then
  50.         turtle.turnLeft()
  51.         b = side
  52.     else
  53.         while (b < side) do
  54.             turtle.turnRight()
  55.             b = b + 1
  56.         end
  57.         while (b > side) do
  58.             turtle.turnLeft()
  59.             b = b - 1
  60.         end
  61.     end
  62.     if b == 0 then dz = 1; dx = 0
  63.     elseif b == 1 then dx = 1; dz = 0
  64.     elseif b == 2 then dz = -1; dx = 0
  65.     else dx = -1; dz = 0 end
  66. end
  67. local function up(num)
  68.     if not num then num = 1 end
  69.     for i = 1, num do
  70.         while not turtle.up() do turtle.attackUp() turtle.digUp() end
  71.     end
  72.     y = y - num
  73. end
  74. local function down(num)
  75.     if not num then num = 1 end
  76.     for i = 1, num do
  77.         while not turtle.down() do turtle.attackDown() turtle.digDown() end
  78.     end
  79.     y = y + num
  80. end
  81.  
  82. -- ============================== Ф У Н К Ц И И ============================= --
  83. -- Возврат домой
  84. local function home(noreturn)
  85.     local x1 = x
  86.     local z1 = z
  87.     local y1 = y
  88.     local b1 = b
  89.  
  90.     up(y1)
  91.     if x1 > 0 then
  92.         turn(3)
  93.         forward(x1)
  94.     end
  95.     turn(2)
  96.     forward(z1)
  97.     for slot = 1 , 15 do
  98.         turtle.select(slot)
  99.         turtle.drop()
  100.     end
  101.     turtle.select(1)
  102.     turnAround()
  103.     if not noreturn then
  104.         forward(z1)
  105.         if x1 >  0 then
  106.             turn(1)
  107.             forward(x1)
  108.         end
  109.         turn(b1)
  110.         down(y1)
  111.     end
  112. end
  113.  
  114. -- ======================== Г Л А В Н Ы Й   Ц И К Л ======================== --
  115.  
  116. turtle.digUp()
  117. turtle.digDown()
  118. for k1 = 1, num_of_layers_y do
  119.     for i = 1, num_all + 1 do
  120.         if turtle.getItemCount(15) > 0 then
  121.             home(false)
  122.         end
  123.         turtle.dig()
  124.         forward()
  125.         turtle.digUp()
  126.         turtle.digDown()
  127.         if i%num_of_blocks_z == 0 and i < num_all then
  128.             if (z ~= 0 and k1%2 == 1) or (z == 0 and k1%2 ~= 1) then
  129.                 turnRight()
  130.                 turtle.dig()
  131.                 forward()
  132.                 turnRight()
  133.             else
  134.                 turnLeft()
  135.                 turtle.dig()
  136.                 forward()
  137.                 turnLeft()
  138.             end
  139.             turtle.digUp()
  140.             turtle.digDown()
  141.         end
  142.     end
  143.     if k1 < num_of_layers_y then
  144.         turnAround()
  145.         for d = 1, 3 do
  146.             down()
  147.             turtle.digDown()
  148.         end
  149.     end
  150.  
  151. end
  152. home(true)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement