Whitemambaa

192x3 Tunnel v1.7

Oct 21st, 2013
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 17.91 KB | None | 0 0
  1. --By xXxMoNkEyMaNxXx doz elsez endz
  2. local arg={
  3.     ender=false,
  4. }
  5. local argtypes={
  6.     ender="boolean",
  7. }
  8. for parameter,value in table.concat({...}," "):gmatch'%-([%w_]+) ([^ ]+)' do
  9.     local argtype=argtypes[parameter]
  10.     if argtype=="string" then
  11.         arg[parameter]=tostring(value) or arg[parameter]
  12.     elseif argtype=="number" then
  13.         arg[parameter]=tonumber(value) or arg[parameter]
  14.     elseif argtype=="boolean" then
  15.         arg[parameter]=value=="true" or value~="false" and arg[parameter] or false
  16.     elseif argtype=="peripheral" then
  17.         arg[parameter]=peripheral.wrap(value) or arg[parameter]
  18.     end
  19. end
  20.  
  21. local lookDirs={{0,0,1},{-1,0,0},{0,0,-1},{1,0,0}}
  22.  
  23. local rot=4
  24. local pos={0,0,0}
  25.  
  26. local chestPos={0,0,0,1}
  27.  
  28. local function lua(v,i,n)
  29.     return (v+i-1)%n+1
  30. end
  31.  
  32. turtle.select(1)
  33. local inventory={slot=1,protected={1,2}}
  34. function inventory.select(slot)
  35.     if turtle.select(slot) then
  36.         inventory.slot=slot
  37.         return slot
  38.     end
  39. end
  40. local actions={s=inventory.select}
  41.  
  42. function inventory.unProtected(slot)
  43.     for _,ip in next,inventory.protected do
  44.         if slot==ip then
  45.             return false
  46.         end
  47.     end
  48.     return true
  49. end
  50. function inventory.isFull(roomLeft)--Return true if all slots are occupied. (send true to make sure they have no room)
  51.     --print'asd'
  52.     for i=1,16 do
  53.         if inventory.unProtected(i) then
  54.             if turtle.getItemCount(i)==0 then
  55.                 return false
  56.             elseif roomLeft and turtle.getItemSpace(i)>0 then
  57.                 return false
  58.             end
  59.         end
  60.     end
  61.     return true
  62. end
  63. function inventory.isEmpty()
  64.     for i=1,16 do
  65.         if inventory.unProtected(i) and turtle.getItemCount(i)>0 then
  66.             return false
  67.         end
  68.     end
  69.     return true
  70. end
  71. function inventory.empty(f)--Choose which way you want to drop.
  72.     f=f or turtle.drop
  73.     local allDropped=true
  74.     for i=1,16 do
  75.         if inventory.unProtected(i) and inventory.select(i) then
  76.             allDropped=allDropped and f(turtle.getItemCount(i))
  77.         end
  78.     end
  79.     inventory.select(3)
  80.     return allDropped
  81. end
  82. function inventory.defineSlot(slotNumber,slotName,slotEvents)
  83.     --depleted
  84. end
  85.  
  86. local function placeNewChest()
  87.     if chestPos then
  88.         chestPos={chestPos[1]+3,chestPos[2],chestPos[3],chestPos[4]}
  89.         actions.goTo(chestPos,"xzy")
  90.         actions.turnTo(chestPos[4])
  91.         inventory.select(2)
  92.         actions.pf(true)
  93.         actions.goTo({chestPos[1]-1},"x")
  94.         actions.turnTo(chestPos[4])
  95.         actions.pf(true)
  96.     else
  97.         chestPos={0,0,0,1}
  98.         actions.goTo({0,0,0},"xzy")
  99.         actions.turnTo(1)
  100.         inventory.select(2)
  101.         actions.pf(true)
  102.     end
  103. end
  104.  
  105. local function unload()
  106.     --print'Inventory full, unloading.'
  107.     if arg.ender then
  108.         local wayRot=rot
  109.         actions.turnTo(2)
  110.         actions.s(2)
  111.         actions.pf()
  112.         inventory.empty()
  113.         actions.s(2)
  114.         actions.df()
  115.         actions.turnTo(wayRot)
  116.     else
  117.         local wayPoint={pos[1],pos[2],pos[3],rot}
  118.         if chestPos then
  119.             actions.goTo(chestPos,"xzy")
  120.             actions.turnTo(chestPos[4])
  121.         else
  122.             placeNewChest()
  123.         end
  124.         if not inventory.empty() then
  125.             repeat
  126.                 placeNewChest()
  127.             until inventory.empty()
  128.         end
  129.         actions.goTo(wayPoint,"yzx")
  130.         actions.turnTo(wayPoint[4])
  131.     end
  132. end
  133.  
  134. --[[
  135.     Select: s#
  136.     Turn: tl#,tr#
  137.     Dig: df,du,dd
  138.     Go: gu#,gd#,gf#,gb#
  139.  
  140.     Place: pf,pu,pd
  141. --]]
  142.  
  143. --turn
  144. function actions.tr(n)
  145.     for i=1,n do
  146.         if turtle.turnRight() then
  147.             rot=lua(rot,1,4)
  148.         end
  149.     end
  150. end
  151. function actions.tl(n)
  152.     for i=1,n do
  153.         if turtle.turnLeft() then
  154.             rot=lua(rot,-1,4)
  155.         end
  156.     end
  157. end
  158. function actions.turnTo(dir)
  159.     local n=(dir-rot+2)%4-2
  160.     if n>0 then
  161.         actions.tr(n)
  162.     elseif n<0 then
  163.         actions.tl(-n)
  164.     end
  165. end
  166.  
  167. --dig
  168. function actions.df()
  169.     while turtle.detect() do
  170.         if inventory.isFull() then
  171.             unload()
  172.         end
  173.         if turtle.dig() then
  174.             return true
  175.         end
  176.     end
  177. end
  178. function actions.du()
  179.     while turtle.detectUp() do
  180.         if inventory.isFull() then
  181.             unload()
  182.         end
  183.         if turtle.digUp() then
  184.             return true
  185.         end
  186.     end
  187. end
  188. function actions.dd()
  189.     while turtle.detectDown() do
  190.         if inventory.isFull() then
  191.             unload()
  192.         end
  193.         if turtle.digDown() then
  194.             return true
  195.         end
  196.     end
  197. end
  198.  
  199. --place
  200. function actions.pf(force)
  201.     if turtle.detect() and force then
  202.         turtle.dig()
  203.     end
  204.     if turtle.getItemCount(inventory.slot)<=1 then
  205.         print("I'm out of items in slot "..inventory.slot.." and can't place infront of me, HELP ME I'M DUMB!")
  206.         --repeat actions.tl(4) until turtle.getItemCount(inventory.slot)>1
  207.     end
  208.     turtle.place()
  209. end
  210. function actions.pu(force)
  211.     if turtle.detectUp() and force then
  212.         turtle.digUp()
  213.     end
  214.     if turtle.getItemCount(inventory.slot)<=1 then
  215.         print("I'm out of items in slot "..inventory.slot.." and can't place above me, HELP ME I'M DUMB!")
  216.         --repeat actions.tl(4) until turtle.getItemCount(inventory.slot)>1
  217.     end
  218.     turtle.placeUp()
  219. end
  220. function actions.pd(force)
  221.     if turtle.detectDown() and force then
  222.         turtle.digDown()
  223.     end
  224.     if turtle.getItemCount(inventory.slot)<=1 then
  225.         print("I'm out of items in slot "..inventory.slot.." and can't place below me, HELP ME I'M DUMB!")
  226.         --if inventory.slot==2 then--HARDCODING
  227.             repeat actions.tl(4) until turtle.getItemCount(inventory.slot)>1
  228.         --end
  229.     end
  230.     turtle.placeDown()
  231. end
  232.  
  233. --go
  234. function actions.gf(n,force)
  235.     for i=1,n do
  236.         repeat
  237.             if turtle.detect() then --and force
  238.                 turtle.dig()
  239.             else
  240.                 turtle.attack()
  241.             end
  242.         until turtle.forward()
  243.         pos[1]=pos[1]+lookDirs[rot][1]
  244.         pos[3]=pos[3]+lookDirs[rot][3]
  245.     end
  246. end
  247. function actions.gb(n)
  248.     for i=1,n do
  249.         repeat until turtle.back()
  250.         pos[1]=pos[1]-lookDirs[rot][1]
  251.         pos[3]=pos[3]-lookDirs[rot][3]
  252.     end
  253. end
  254. function actions.gu(n,force)
  255.     for i=1,n do
  256.         repeat
  257.             if turtle.detectUp() then --and force
  258.                 turtle.digUp()
  259.             else
  260.                 turtle.attackUp()
  261.             end
  262.         until turtle.up()
  263.         pos[2]=pos[2]+1
  264.     end
  265. end
  266. function actions.gd(n,force)
  267.     for i=1,n do
  268.         repeat
  269.             if turtle.detectDown() then --and force
  270.                 turtle.digDown()
  271.             else
  272.                 turtle.attackDown()
  273.             end
  274.         until turtle.down()
  275.         pos[2]=pos[2]-1
  276.     end
  277. end
  278. function actions.goTo(location,axisOrder)
  279.     axisOrder=axisOrder or "xyz"
  280.     for a in axisOrder:gmatch'[xyz]' do
  281.         if a=="x" then
  282.             if location[1]>pos[1] then
  283.                 actions.turnTo(4)
  284.                 actions.gf(location[1]-pos[1],true)
  285.             elseif location[1]<pos[1] then
  286.                 actions.turnTo(2)
  287.                 actions.gf(pos[1]-location[1],true)
  288.             end
  289.         elseif a=="y" then
  290.             if location[2]>pos[2] then
  291.                 actions.gu(location[2]-pos[2],true)
  292.             elseif location[2]<pos[2] then
  293.                 actions.gd(pos[2]-location[2],true)
  294.             end
  295.         elseif a=="z" then
  296.             if location[3]>pos[3] then
  297.                 actions.turnTo(1)
  298.                 actions.gf(location[3]-pos[3],true)
  299.             elseif location[3]<pos[3] then
  300.                 actions.turnTo(3)
  301.                 actions.gf(pos[3]-location[3],true)
  302.             end
  303.         end
  304.     end
  305. end
  306. actions.col="df gf du dd"--Dig out the 1x3x1 column infront of the turtle.
  307.  
  308. local function seq(commands)
  309.     for c,n in commands:gmatch'(%a+)(%d*)' do
  310.         local ac=actions[c]
  311.         local tac=type(ac)
  312.         if tac=="function" then
  313.             ac(tonumber(n) or 1)
  314.         elseif tac=="string" then
  315.             seq(ac)
  316.         end
  317.     end
  318. end
  319. --[[
  320. actions.goTo{3,1,-1}
  321. print(unpack(pos))
  322. actions.goTo{0,0,0}
  323. print(unpack(pos))
  324. actions.turnTo(0)
  325. --]]
  326. ---[==[
  327. if arg.ender then
  328.     seq'gu tr gf tl'
  329. else
  330.     seq'tr s2 pf gu gf tl gb pd gf'
  331. end
  332. while true do
  333.     --[=[ This sequence digs 22 3x3 columns, placing a torch every 11 blocks.
  334.     seq[[
  335.     col tl col s1 pd col tr
  336.     col tr col col tl
  337.     col tl col col tr
  338.     col tr col col tl
  339.     col tl col col tr
  340.     col tr col col tl
  341.     col tl col col tr
  342.     col tr col col tl
  343.     col tl col col tr
  344.     col tr col col tl
  345.     col tl col col tr
  346.     col tr col s1 pd col tl
  347.     col tl col col tr
  348.     col tr col col tl
  349.     col tl col col tr
  350.     col tr col col tl
  351.     col tl col col tr
  352.     col tr col col tl
  353.     col tl col col tr
  354.     col tr col col tl
  355.     col tl col col tr
  356.     col tr col col tl
  357.     ]]
  358.     --]=]
  359.  
  360.     --[=[ This one does a 16x3 tunnel.
  361.     seq[[
  362.     col tl col col s1 pd col col col col col col col col col col col s1 pd col col tr
  363.     col tr col col col col col col col col col col col col col col col tl
  364.     col tl col col col col col col col col col col col col col col col tr
  365.     col tr col col col col col col col col col col col col col col col tl
  366.     col tl col col col col col col col col col col col col col col col tr
  367.     col tr col col col col col col col s1 pd col col col col col col col col tl
  368.     col tl col col col col col col col col col col col col col col col tr
  369.     col tr col col col col col col col col col col col col col col col tl
  370.     col tl col col col col col col col col col col col col col col col tr
  371.     col tr col col col col col col col col col col col col col col col tl
  372.     ]]
  373.     --]=]
  374.  
  375.     --[=[ This one does a 38x3 tunnel.
  376.     seq[[
  377.     col tl col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col tr
  378.     col tr col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tl
  379.     col tl col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tr
  380.     col tr col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tl
  381.     col tl col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tr
  382.     col tr col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col tl
  383.     col tl col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tr
  384.     col tr col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tl
  385.     col tl col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tr
  386.     col tr col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tl
  387.     ]]
  388.     --]=]
  389.  
  390.     ---[=[ This one does a 192x3 tunnel. (optimal within error!)
  391.     seq[[
  392.     col tl col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col tr
  393.     col tr col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tl
  394.     col tl col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tr
  395.     col tr col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tl
  396.     col tl col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tr
  397.     col tr col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col col col col s1 pd col col col col col col col col tl
  398.     col tl col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tr
  399.     col tr col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tl
  400.     col tl col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tr
  401.     col tr col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col col tl
  402.     ]]
  403.     --]=]
  404. end
  405. --]==]
Advertisement
Add Comment
Please, Sign In to add comment