Advertisement
Niseg

Mining well quarry session persistant on 1 well mode (99%~)

Jul 19th, 2013
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 9.73 KB | None | 0 0
  1. local initfn ="initwell"
  2. local initar={}
  3. local start_fuel=0
  4. local target_fuel=0
  5. local miningwell=1
  6. local chest=2
  7. local conduit=3
  8. local chargestation=4
  9. local args={...}
  10. local arg={}
  11. for i=1,#args do arg[i]=args[i] end
  12. local slp = 10
  13. local lx=30
  14. local ly=30
  15. local slot=17
  16. local pipeItems=false
  17. local hasChargeStation=false;
  18. local reverseDir=false
  19. local dumbyMode=false
  20. local fuelidx=0;
  21. local ftbl= {
  22.                 {tpd,   mdd,    turtle.digDown, turtle.detectDown,  turtle.compareDown  },
  23.                 {tpf,       mfd,    turtle.dig  ,   turtle.detect   ,   turtle.compare      },
  24.                 {tpu,   mud,        turtle.digUp,   turtle.detectUp,    turtle.compareUp    }
  25.                
  26.             }
  27.  
  28. local cf=turtle.getFuelLevel()
  29. target_fuel=cf
  30. local function selt(sl)
  31. if dumbyMode and fuelidx>target_fuel then return end
  32. if slot==sl then return end
  33. slot=sl
  34. turtle.select(sl)
  35. end
  36.  
  37. local function saveFuelFile()
  38. arg[5]=turtle.getFuelLevel()
  39. local fout =fs.open(initfn,"w")
  40. fout.writeLine(textutils.serialize(arg))
  41. print(textutils.serialize(arg))
  42. fout.close()
  43. end
  44.  
  45. local function loadFuelFile()
  46. local fin =fs.open(initfn,"r")
  47. local str=fin.readLine()
  48. print(str)
  49. arg=textutils.unserialize(str)
  50. start_fuel=arg[5]
  51. fuelidx=start_fuel
  52. fin.close()
  53. end
  54.  
  55. local function dumbyMove()
  56. fuelidx= fuelidx-1
  57. if fuelidx== target_fuel then  dumbyMode=false end
  58. end
  59.  
  60. local function dumbyPlace()
  61. end
  62. local function dumbyTurn()
  63. end
  64.  
  65. local function digAndThrow(dir)
  66.     if dir== nil  then dir=0 end
  67.     local dir2=dir+2
  68.     local full=false;
  69.     local orgslot=slot
  70. for i=1,16 do
  71.     if turtle.getItemCount(i)==0 then
  72.     selt(i)
  73.     break
  74.     end if(i==16) then
  75.         --print("failed to place block - not critical")
  76. --      return false
  77.         full = true
  78.     end
  79.    
  80. end
  81.     -- if all slots are
  82.     if not ftbl[dir2][3]() then selt(orgslot);return false end
  83.     if not full then
  84.     turtle.drop()
  85.     selt(orgslot)
  86.     end
  87.     return true
  88. end
  89.  
  90. local function trt()
  91. if dumbyMode then dumbyTurn();return end
  92. turtle.turnRight()
  93. end
  94. local function tlt()
  95. if dumbyMode then dumbyTurn();return end
  96. turtle.turnLeft()
  97. end
  98.  
  99. local function mfd()
  100.  
  101. if dumbyMode then dumbyMove();return end
  102. while not turtle.forward() do
  103. if turtle.getFuelLevel()==0 then return false end
  104. digAndThrow(0)
  105. end
  106. end
  107. local function mbd()
  108. if dumbyMode then dumbyMove();return end
  109.  
  110. while not turtle.back() do
  111. if turtle.getFuelLevel()==0 then return false end
  112. tlt()
  113. tlt()
  114. digAndThrow(0)
  115. tlt()
  116. tlt()
  117. end
  118. return true
  119. end
  120.  
  121. local function mdd()
  122. if dumbyMode then dumbyMove();return end
  123.  
  124. while not turtle.down() do
  125. if turtle.getFuelLevel()==0 then return false end
  126. digAndThrow(-1)
  127. end
  128. end
  129. local function mud()
  130. if dumbyMode then dumbyMove();return end
  131.  
  132. while not turtle.up() do
  133. if turtle.getFuelLevel()==0 then return false end
  134. digAndThrow(1)
  135. end
  136. end
  137.  
  138. local function tpf()
  139. if dumbyMode then dumbyPlace();return end
  140.  
  141. while not turtle.place() do
  142. if fuelidx~= nil and fuelidx==target_fuel then break else digAndThrow(0) end
  143. end
  144. end
  145.  
  146. local function tpu()
  147. if dumbyMode then dumbyPlace();return end
  148.  
  149. while not turtle.placeUp() do
  150. if fuelidx~= nil and fuelidx==target_fuel then break else digAndThrow(1) end
  151. end
  152. return true
  153. end
  154.  
  155. local function tpd()
  156. if dumbyMode then dumbyPlace();return end
  157. while not turtle.placeDown() do
  158. if fuelidx~= nil and fuelidx==target_fuel then break else digAndThrow(-1) end
  159. end
  160. return true
  161. end
  162.  
  163. local function lookForMore(slotn)
  164. selt(slotn)
  165. --print("entry slotn= "..slotn)
  166. for i=1,16 do
  167.  
  168. if i~=slotn and turtle.compareTo(i) then
  169.         --print ("found more in slot "..i.."with "..turtle.getItemCount(i).." items")
  170.         --print("got space for "..turtle.getItemSpace(slotn).." more")
  171.         selt(i)
  172.         turtle.transferTo(slotn,math.min(turtle.getItemCount(i),turtle.getItemSpace(slotn)))
  173.     --  print("slotn="..slotn)
  174.         selt(slotn)
  175.     return true
  176. end
  177. end
  178. return false
  179.  
  180. end
  181. --[[
  182. local function cleanSingleWellState()
  183.     local retval =1
  184.    
  185.     if turtle.getItemCount(4)==0 and hasChargeStation then
  186.     then selt(4); turtle.dig()
  187.     return
  188.     end
  189.     if turtle.detect() then
  190.     selt(miningwell)
  191.     if (turtle.compare() then
  192.         turtle.dig();turtle.up()
  193.         if turtle.detect() then
  194.         turtle.select(conduit)
  195.         turtle.dig()
  196.         mfd()
  197.         return
  198.         end
  199.     end
  200.     else
  201.    
  202.     if turtle.getItemCount(conduit)==1 and not lookForMore(conduit) then mud(); return end
  203.     selt(conduit)
  204.     turtle.place()
  205.    
  206.     end
  207.     selt(conduit)
  208.     if turtle.compare() then
  209.     sleep(slp)
  210.     if not pipeItems and turtle.getItemCount(chest)==0 then
  211.     selt(chest); turtle.digDown();
  212.     end
  213.     mdd();
  214.     selt(miningwell)   
  215.     turtle.dig()
  216.     if pipeItems and i<lx then
  217.         if turtle.getItemCount(chest)==1 and not lookForMore(chest) then mud(); return end
  218.         selt(chest)
  219.         tpf()
  220.     end
  221.     mud()
  222.     return
  223.     end
  224.  
  225.    
  226. end
  227. --]]
  228. print("Niseg's Mining well script")
  229. if #args~=4 then
  230. if #args==0 and fs.exists(initfn) then
  231. loadFuelFile()
  232. dumbyMode=true
  233. print("starting recovery")
  234. else
  235. print(shell.getRunningProgram().." <delay> <row length> <rows> <0-1> ")
  236. print("1 is use transport pipes 0 enderchest" )
  237. error()
  238. end
  239. end
  240. if arg[1] ~= nil then slp = tonumber(arg[1]) end
  241. if arg[2] ~= nil then lx = tonumber(arg[2]) end
  242. if arg[3] ~= nil then ly = tonumber(arg[3]) end
  243. if arg[4] ~=nil then
  244. local sel =tonumber(arg[4])
  245.  if sel== 1 or sel==3 then  pipeItems=true  end
  246.  
  247. if sel==3 or sel== 2 then reverseDir=true end
  248.  end
  249.  
  250. local wellcount=turtle.getItemCount(miningwell)
  251. if wellcount>=3 then wellcount =3 else wellcount =1 end
  252. --if not pipeItems then wellcount=1 end
  253. if not dumbyMode and turtle.getItemCount(chargestation)>0 then
  254. print("checking if I have a charge station")
  255. if not mbd() then print("no fuel");error() end
  256. selt(chargestation)
  257.  
  258. tpf(); sleep(5);
  259.  
  260. if(turtle.getFuelLevel()>cf) then hasChargeStation = true end
  261. turtle.dig()
  262. mfd()
  263. end
  264. if not dumbyMode and wellcount == 1 then
  265. saveFuelFile()
  266. local fout=fs.open("startup","w")
  267. fout.writeLine("shell.run(\""..shell.getRunningProgram().."\")")
  268. fout.close()
  269. end
  270. for j=1,ly do
  271.         print("starting row " ..j)         
  272.         local nf=6*lx +wellcount+3;
  273.         cf=turtle.getFuelLevel()
  274.         print("fuel is at "..cf.. " / "..nf)
  275.         while nf>cf do
  276.             if hasChargeStation  then
  277.             mbd()
  278.             selt(chargestation)
  279.             tpf()
  280.             while nf>cf do cf=turtle.getFuelLevel(); sleep(10) end
  281.             turtle.dig()
  282.             mfd()
  283.             else
  284.             print(" I need more fuel")
  285.             for k=1,4 do tlt() end
  286.             shell.run("refuel all")
  287.             sleep(5);
  288.            
  289.             end        
  290.             cf=turtle.getFuelLevel()
  291.         end
  292.         if(pipeItems) then
  293.             selt(chest); tpd()
  294.             mbd();selt(conduit); tpf()
  295.         end
  296.                
  297.                 for i=1,lx do
  298.        
  299.                     if wellcount==1 then --                 single well
  300.                                              
  301.                         selt(miningwell)
  302.                         tpd()
  303.                         mbd()
  304.                         if not pipeItems  then
  305.                             selt(chest)
  306.                             tpd()
  307.                         end
  308.                         if turtle.getItemCount(conduit)==1 and not lookForMore(conduit) then break end
  309.                             selt(conduit)
  310.                             tpf()
  311.                         if not dumbyMode then sleep(slp) end
  312.                         if not pipeItems then
  313.                             selt(chest)
  314.                             turtle.digDown()
  315.                         end
  316.                         mdd()
  317.                         selt(miningwell)
  318.                    
  319.                         if not dumbyMode then turtle.dig() end
  320.                         if pipeItems and i<lx then
  321.                             if turtle.getItemCount(chest)==1 and not lookForMore(chest) then mud();break end
  322.                    
  323.                             selt(chest)
  324.                             tpf()
  325.                         end
  326.                         mud()
  327.                     else
  328.                             if i==1 then
  329.                             --mbd()
  330.                             mdd()
  331.                             end
  332.                             selt(miningwell)
  333.                             for k=1,3 do
  334.                             tlt()
  335.                             tpf()
  336.                             end
  337.                             mud()
  338.                             if pipeItems and turtle.getItemCount(chest)==1 and not lookForMore(chest) then print("not enough pipes");error() end
  339.                             selt(chest)
  340.                             tpd()
  341.                             for k=1,3 do
  342.                            
  343.                             if turtle.getItemCount(conduit)==1 and not lookForMore(conduit) then print("not enough energy pipes");error() end
  344.                             selt(conduit)
  345.                             tpf()
  346.                             trt()
  347.                             end
  348.                             mud()
  349.                             if turtle.getItemCount(conduit)==1 and not lookForMore(conduit) then print("not enough energy pipes");error() end
  350.                             selt(conduit)
  351.                             tpd()
  352.                             sleep(slp) --don't remember how long
  353.                            
  354.                             -- time to clean up
  355.                        
  356.                             turtle.digDown()
  357.                             mdd()
  358.                            
  359.                             for k=1,3 do
  360.                             tlt()
  361.                             turtle.dig()
  362.                             end
  363.                             selt(chest)
  364.                             turtle.digDown()
  365.                             mdd()
  366.                             selt(miningwell)
  367.                             for k=1,3 do
  368.                             turtle.dig()
  369.                             trt()
  370.                             end
  371.                             --trt()
  372.                             selt(conduit)-- she'll be right
  373.                             tpu()
  374.                             mbd()
  375.                             if pipeItems then
  376.                             selt(chest)
  377.                             tpf()
  378.                             end
  379.                             if i==lx then mud() end
  380.                            
  381.                     end
  382.                        
  383.                    
  384.                     end
  385.            
  386.  
  387.                  selt(conduit)
  388.                 --- retract the conduits
  389.                 local llx=lx+1
  390.                 if pipeItems then llx=llx+1 end
  391.  
  392. --                while turtle.detect() do
  393.                 for i=1,llx do
  394.                     if not dumbyMode then turtle.dig() end
  395.                      --turtle.dig();
  396.                     mfd();
  397.                     if not dumbyMode then
  398.                         if pipeItems and turtle.detect()then
  399.                                         selt(chest)
  400.                          turtle.digDown()                      
  401.     --                  turtle.digDown()
  402.                                         selt(conduit)
  403.                         end
  404.                     end
  405.  
  406.                 end
  407.  
  408. if(reverseDir) then trt() else tlt() end
  409. for k=1,wellcount do
  410. mbd()
  411. --tpd()
  412. while redstone.getInput("top") do
  413. selt(conduit)
  414. sleep(1)
  415. turtle.suckUp()
  416. while turtle.detectUp() do sleep(0.5) end
  417.  
  418. end
  419.  
  420. if turtle.getItemCount(conduit)==1 and not lookForMore(conduit) then break end
  421. if not turtle.compareUp() then tpu() end
  422.  
  423. if pipeItems then
  424. if turtle.getItemCount(chest)==1 and not lookForMore(chest) then break end
  425. selt(chest)
  426. tpd()
  427. selt(conduit)
  428. end
  429. end
  430. if(reverseDir) then tlt() else trt() end
  431. mbd()
  432. if turtle.getItemCount(conduit)==1 and not lookForMore(conduit) then break end
  433. tpf()
  434. --[[if pipeItems then
  435. selt(chest)
  436. tpd()
  437. selt(conduit)
  438. end
  439. --]]
  440. --[[
  441. mbd()
  442. tpf()
  443. if pipeItems then
  444. selt(chest)
  445. tpd()
  446. selt(conduit)
  447. end
  448. --]]
  449.  
  450. end
  451. fs.delete(initfn)
  452. fs.delete("startup")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement