solidity

minecraft swarm queen

May 26th, 2013
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.33 KB | None | 0 0
  1. -- swarm queen
  2. time_start = os.clock()
  3. sdisk = 1
  4. sdrive = 2
  5. sfuel = 3
  6. sdrone = 4
  7. sdump = 5
  8. amounts = {1,1,1,63,1}
  9.  
  10. --y = 6+3       -- current feet y + 6 to account for bedrock
  11.  
  12. function estFuel(y)
  13.     fuel = 2*y + 10
  14.     if turtle.getFuelLevel() < fuel then
  15.         turtle.select(sfuel)
  16.         while not turtle.placeDown() do
  17.             if turtle.detectDown() then
  18.                 turtle.digDown()
  19.             else
  20.                 turtle.attackDown()
  21.             end
  22.             sleep(0.2)
  23.         end
  24.         print("refueling to estimated level of "..fuel)
  25.         turtle.select(sfuel)
  26.         while turtle.getFuelLevel() < fuel do
  27.             if turtle.getItemCount(sfuel) < 1 then
  28.                 while not turtle.suckDown() do
  29.                     sleep(2)
  30.                 end
  31.             end
  32.             turtle.refuel(1)
  33.             print("fuel level: "..turtle.getFuelLevel().." / "..fuel)
  34.         end
  35.         -- drop remaining fuel off
  36.         turtle.dropDown()
  37.         --pick fuel chest back up
  38.         while not turtle.digDown() do
  39.             sleep(2)
  40.         end
  41.     end
  42. end
  43.  
  44. function tleft(turns)
  45.     if turns == nil then
  46.         turns = 1
  47.     end
  48.     for i = 1,turns do
  49.         turtle.turnLeft()
  50.     end
  51. end
  52.  
  53. function tright(turns)
  54.     if turns == nil then
  55.         turns = 1
  56.     end
  57.     for i = 1,turns do
  58.         turtle.turnRight()
  59.     end
  60. end
  61.  
  62. function move(dir, dist, dig)
  63.     for d = 1, dist do
  64.         if dir == "f" then
  65.             while not turtle.forward() do
  66.                 if turtle.detect() then
  67.                     if dig then
  68.                         turtle.dig()
  69.                     end
  70.                 else
  71.                     turtle.attack()
  72.                 end
  73.                 sleep(0.2)
  74.             end
  75.         elseif dir == "u" then
  76.             while turtle.detect() and dig do
  77.                 turtle.dig()
  78.                 sleep(0.2)  -- wait for gravel/sand to settle
  79.             end            
  80.             while not turtle.up() do
  81.                 if turtle.detectUp() then
  82.                     if dig then
  83.                         turtle.digUp()
  84.                     end
  85.                 else
  86.                     turtle.attackUp()
  87.                 end
  88.                 sleep(0.2)
  89.             end
  90.         elseif dir == "d" then
  91.             while turtle.detect() and dig do
  92.                 turtle.dig()
  93.                 sleep(0.2)
  94.             end
  95.             while not turtle.down() do
  96.                 if turtle.detectDown() then
  97.                     if dig then
  98.                         turtle.digDown()
  99.                     end
  100.                 else
  101.                     turtle.attackDown()
  102.                 end
  103.             end
  104.         elseif dir == "b" then
  105.             if not turtle.back() then
  106.                 left(2)
  107.                 while not turtle.forward() do
  108.                     if turtle.detect() then
  109.                         if dig then
  110.                             turtle.dig()
  111.                         end
  112.                     else
  113.                         turtle.attack()
  114.                     end
  115.                 end
  116.             end
  117.         end
  118.     end
  119. end
  120.  
  121. -- check if the items are in order
  122. complete = true
  123. for s=1,#amounts do
  124.     if turtle.getItemCount(s) ~= amounts[s] then
  125.         complete = false
  126.         break
  127.     end
  128. end
  129. if not complete then
  130.     print("incomplete setup, i need:")
  131.     print("slot 1: disk")
  132.     print("slot 2: drive")
  133.     print("slot 3: enderchest for refueling")
  134.     print("slot 4: 63 mining turtles (without label!)")
  135.     print("slot 5: enderchest for dumping")
  136. else
  137.     -- ask for correct y-level if not determined via gps
  138.     x,y,z = gps.locate()
  139.     if y == nil then
  140.         print("no gps, what is my y-level? (f3 feet level!)")
  141.         y = tonumber(read())
  142.     end
  143.     -- refuel if necessary
  144.     estFuel(y)
  145.     -- setup start
  146.     move("f",1,true)
  147.     -- put down refuel chest
  148.     turtle.select(sfuel)
  149.     while not turtle.placeDown() do
  150.         if turtle.detectDown() then
  151.             turtle.digDown()
  152.         else
  153.             turtle.attackDown()
  154.         end
  155.         sleep(0.2)
  156.     end
  157.     -- put up disk drive
  158.     turtle.select(sdrive)
  159.     while not turtle.placeUp() do
  160.         if turtle.detectUp() then
  161.             turtle.digUp()
  162.         else
  163.             turtle.attackUp()
  164.         end
  165.         sleep(0.2)
  166.     end
  167.     -- put disk in
  168.     turtle.select(sdisk)
  169.     turtle.dropUp()
  170.     -- write state file
  171.     if fs.exists("disk/state") then
  172.         fs.delete("disk/state")
  173.     end
  174.     fh = fs.open("disk/state","w")
  175.     fh.writeLine("15")
  176.     fh.writeLine("3")
  177.     fh.writeLine(y)
  178.     fh.close()
  179.     -- write startup file
  180.     if not fs.exists("disk/startup") then
  181.         --fs.move("disk/startup","disk/startup.old")
  182.         shell.run("pastebin get rZaEb5s6 disk/startup")
  183.     end
  184.     -- put down turtles
  185.     turtle.select(sdrone)
  186.     move("b",1,true)
  187.     print("deploying swarm")
  188.     while turtle.getItemCount(sdrone) > 0 do
  189.         while not turtle.place() do
  190.             sleep(2)
  191.         end
  192.         drone = peripheral.wrap("front")
  193.         drone.turnOn()
  194.     end
  195.     -- collect disk
  196.     move("f",1,false)
  197.     turtle.select(sdisk)
  198.     turtle.suckUp()
  199.     -- collect drive
  200.     turtle.select(sdrive)
  201.     turtle.digUp()
  202.     -- collect fuel chest
  203.     turtle.select(sfuel)
  204.     turtle.digDown()
  205.     move("b",1,true)
  206.    
  207.     -- dig out
  208.     move("d",y-5,true)
  209.     move("f",2,true)
  210.     move("u",y-6,true)
  211.     move("u",1,false)
  212.    
  213.     -- prepare to collect turtles
  214.     -- drop dump chest
  215.     turtle.select(sdump)
  216.     while not turtle.placeDown() do
  217.         if turtle.detectDown() then
  218.             turtle.digDown()
  219.         else
  220.             turtle.attackDown()
  221.         end
  222.     end
  223.     -- check if turtle has arrived and empty it
  224.     print("wainting for drones to return")
  225.     items = 0
  226.     for i = 1,63 do
  227.         if i == 1 then
  228.             smin = sdrone
  229.         else
  230.             smin = sdump
  231.         end
  232.         while not turtle.detect() do
  233.             sleep(2)
  234.         end
  235.         print("drone "..i.." / 63 arrived")
  236.         while turtle.suck() do
  237.             if turtle.getItemCount(16) > 1 then
  238.                 for s = 16,smin,-1 do
  239.                     turtle.select(s)
  240.                     items = items + turtle.getItemCount(s)
  241.                     while not turtle.dropDown() do
  242.                         sleep(2)
  243.                     end
  244.                 end
  245.             end
  246.         end
  247.         for s = 16,smin,-1 do
  248.             if turtle.getItemCount(s) > 0 then
  249.                 turtle.select(s)
  250.                 items = items + turtle.getItemCount(s)
  251.                 while not turtle.dropDown() do
  252.                     sleep(2)
  253.                 end
  254.             end
  255.         end
  256.         turtle.select(sdrone)
  257.         turtle.dig()
  258.     end
  259.     turtle.select(sdump)
  260.     turtle.digDown()
  261. end
  262. time_end = os.clock()
  263. dur = time_end - time_start
  264. print("chunk cleared in "..dur.." seconds, resulting in "..items.." items)
Advertisement
Add Comment
Please, Sign In to add comment