Advertisement
Thutmose_I

ASTUmine

Dec 2nd, 2012
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.29 KB | None | 0 0
  1. arg = { ... }
  2. length = tonumber(arg[1])
  3. if #arg == 0 then
  4.     length = 1
  5. end
  6. if #arg == 2 then
  7.     up = true
  8. else
  9.     up = false
  10. end
  11. ores = {14, -- Gold
  12.         15, -- Iron
  13.         16, -- Coal
  14.         21, -- Lapis Lazuli
  15.         49, -- Obsidian
  16.         56, -- Dimond
  17.         73, -- Redstone
  18.         129, -- Emerald
  19.         247, -- uranium
  20.         253,
  21.         2501,
  22.         901,
  23.         910}
  24.    
  25. orex = { nil }
  26. orey = { nil }
  27. orez = { nil }
  28.  
  29. beenx = { nil }
  30. beeny = { nil }
  31. beenz = { nil }
  32.  
  33. oredists = { nil }
  34.  
  35. local mine = true
  36. count = 0
  37. scanned = false
  38. closest = 0
  39. local detectID = peripheral.wrap("right")
  40.  
  41. local function isFull()
  42.         for n=16,1,-1 do
  43.                 if turtle.getItemCount(n) < 1 then
  44.                         turtle.select(1)
  45.                         return false
  46.                 end
  47.         end
  48.         return true
  49. end
  50.  
  51. local function OreDown()
  52.     if not turtle.detectDown() then
  53.             return false
  54.     end
  55.     id = detectID.IDetectDown()
  56.     num = #ores
  57.     for i = 1,num do
  58.         test = ores[i]
  59.         if (id == test) then
  60.             return true
  61.         end      
  62.     end
  63.     return false  
  64. end
  65.  
  66. local function OreUp()
  67.     if not turtle.detectUp() then
  68.             return false
  69.     end
  70.     id = detectID.IDetectUp()
  71.     num = #ores
  72.     for i = 1,num do
  73.         test = ores[i]
  74.         if (id == test) then
  75.             return true
  76.         end      
  77.     end
  78.     return false  
  79. end
  80.  
  81. local function OreNorth()
  82.     capi.facef(2)
  83.     if not turtle.detect() then
  84.             return false
  85.     end
  86.     id = detectID.IDetect()
  87.     num = #ores
  88.     for i = 1,num do
  89.         test = ores[i]
  90.         if (id == test) then
  91.             return true
  92.         end      
  93.     end
  94.     return false  
  95. end
  96.  
  97. local function OreSouth()
  98.     capi.facef(0)
  99.     if not turtle.detect() then
  100.             return false
  101.     end
  102.     id = detectID.IDetect()
  103.     num = #ores
  104.     for i = 1,num do
  105.         test = ores[i]
  106.         if (id == test) then
  107.             return true
  108.         end      
  109.     end
  110.     return false  
  111. end
  112.  
  113. local function OreEast()
  114.     capi.facef(3)
  115.     if not turtle.detect() then
  116.             return false
  117.     end
  118.     id = detectID.IDetect()
  119.     num = #ores
  120.     for i = 1,num do
  121.         test = ores[i]
  122.         if (id == test) then
  123.             return true
  124.         end      
  125.     end
  126.     return false  
  127. end
  128.  
  129. local function OreWest()
  130.     capi.facef(1)
  131.     if not turtle.detect() then
  132.             return false
  133.     end
  134.     id = detectID.IDetect()
  135.     num = #ores
  136.     for i = 1,num do
  137.         test = ores[i]
  138.         if (id == test) then
  139.             return true
  140.         end      
  141.     end
  142.     return false  
  143. end
  144.  
  145. local function Scan()
  146.     scanned = true
  147.     x,z,y,f = capi.relpos()
  148.     if OreUp() then
  149.         n = table.maxn(orex)
  150.         scanned = false
  151.         for i = 1,n do
  152.             if ((orex[i] == x) and (orey[i] == y) and (orez[i] == z+1)) then
  153.                 scanned = true
  154.             end
  155.         end
  156.         if not scanned then
  157.             table.insert(orex, x)
  158.             table.insert(orey, y)
  159.             table.insert(orez, z+1)
  160.         end
  161.     end
  162.     if OreDown() then
  163.         n = table.maxn(orex)
  164.         scanned = false
  165.         for i = 1,n do
  166.             if ((orex[i] == x) and (orey[i] == y) and (orez[i] == z-1)) then
  167.                 scanned = true
  168.             end
  169.         end
  170.         if not scanned then
  171.             table.insert(orex, x)
  172.             table.insert(orey, y)
  173.             table.insert(orez, z-1)
  174.         end
  175.     end
  176.     if  OreSouth() then
  177.         n = table.maxn(orex)
  178.         scanned = false
  179.         for i = 1,n do
  180.             if ((orex[i] == x) and (orey[i] == y+1) and (orez[i] == z)) then
  181.                 scanned = true
  182.             end
  183.         end
  184.         if not scanned then
  185.             table.insert(orex, x)
  186.             table.insert(orey, y+1)
  187.             table.insert(orez, z)
  188.         end
  189.     end
  190.     if  OreWest() then
  191.         n = table.maxn(orex)
  192.         scanned = false
  193.         for i = 1,n do
  194.             if ((orex[i] == x-1) and (orey[i] == y) and (orez[i] == z)) then
  195.                 scanned = true
  196.             end
  197.         end
  198.         if not scanned then
  199.             table.insert(orex, x-1)
  200.             table.insert(orey, y)
  201.             table.insert(orez, z)
  202.         end
  203.     end
  204.     if OreNorth() then
  205.         n = table.maxn(orex)
  206.         scanned = false
  207.         for i = 1,n do
  208.             if ((orex[i] == x) and (orey[i] == y-1) and (orez[i] == z)) then
  209.                 scanned = true
  210.             end
  211.         end
  212.         if not scanned then
  213.             table.insert(orex, x)
  214.             table.insert(orey, y-1)
  215.             table.insert(orez, z)
  216.         end
  217.     end
  218.     if  OreEast() then
  219.         n = table.maxn(orex)
  220.         scanned = false
  221.         for i = 1,n do
  222.             if ((orex[i] == x+1) and (orey[i] == y) and (orez[i] == z)) then
  223.                 scanned = true
  224.             end
  225.         end
  226.         if not scanned then
  227.             table.insert(orex, x+1)
  228.             table.insert(orey, y)
  229.             table.insert(orez, z)
  230.         end
  231.     end
  232.     if orex[1] == nil then
  233.         return false
  234.     end
  235.     capi.facef(f)
  236.     return true
  237.     end
  238.  
  239. function Mine()
  240.     Scan()
  241.     n = table.maxn(orex)
  242.     if orex[1] == nil then
  243.         return false
  244.     end
  245.     while n > 0 do
  246.         k = 1
  247.         for i = 1,n do
  248.             oredists[i] = capi.distance(orex[i], orey[i], orez[i], false)
  249.         end
  250.         for j = 1,(n-1) do
  251.             if oredists[k] ~= nil then
  252.                 if oredists[j] < oredists[k] then
  253.                     k = j
  254.                 end
  255.             end
  256.         end
  257.         capi.CartesiangoTo(tonumber(orex[k]), tonumber(orey[k]), tonumber(orez[k]))
  258.         count = count + 1
  259.         table.remove(orex, k)
  260.         table.remove(orey, k)
  261.         table.remove(orez, k)
  262.         table.remove(oredists, k)
  263.         Scan()
  264.         n = table.maxn(orex)
  265.     end
  266.     return true
  267. end
  268.  
  269. capi.safeMove(false)
  270. capi.zeropos()
  271. capi.facef(2)
  272. capi.chestlocation()
  273. capi.facef(0)
  274. for j = 1,length do
  275.     Mine()
  276.     if up then
  277.         turtle.digUp()
  278.     end
  279.     capi.CartesiangoTo(0,j,0)
  280. end
  281. capi.CartesiangoTo(0,0,0)
  282. print("mined "..count.." ore")
  283. capi.returnsupplies()
  284.  
  285.  capi.safeMove(true)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement