sinkir

lua turtle 3D optiprint scan

Oct 20th, 2014
379
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 27.89 KB | None | 0 0
  1. -- pastebin get jB8bm6Hw startup
  2. -- -------------------------------------------
  3. -- 3D Printer Scaner -Sinkir-
  4. -- Version 0.2 (2014/10/21)
  5.  
  6. -- SCANER FUNCTION :
  7. -- slot 16 ender chest Fuel               +-+-+-+-+
  8. -- slot 15 ender chest dump Resources     | | | | |
  9. -- slot 8 to 14 resources to Compare      | | | |c|
  10. -- slot 1 to 7 slots for mining           |c|c|c|c|
  11. --                                        |c|c|R|F|
  12. --                                        +-+-+-+-+
  13. -- -------------------------------------------
  14.  
  15. -- 3D PRINTER FUNCTION :
  16. -- slot 16 ender chest Fuel               +-+-+-+-+
  17. -- slot 15 ender chest dump Resources     | | | | |
  18. -- slot 8 to 14 ender Chest of resources  | | | |c|
  19. -- slot 1 to 7 slots for store resources  |c|c|c|c|
  20. --                                        |c|c|R|F|
  21. --                                        +-+-+-+-+
  22. -- -------------------------------------------
  23.  
  24. -- --------------------
  25. -- format : x,y,z,facing
  26. --               (n e s w)
  27.  
  28. --
  29. --
  30. -- `.+x       |-z     +y.'
  31. --   `.       |       .'
  32. --     `.     |up   .'
  33. --  north`.   |   .' east
  34. --         `. | .'
  35. --           :+:
  36. --         .' | `.
  37. --   west.'   |   `. south
  38. --     .'     |     `.
  39. --   .'       |down   `.
  40. -- .'-y     +z|       -x`.
  41. --
  42. -- yes +z is for down
  43.  
  44. -- --------------------
  45. -- Exemple of data file:
  46. -- --------------------
  47. -- SizeX,SizeY,SizeZ,ProjectName,Function,posX,posY,posZ,Facing
  48. -- ex:
  49. -- "7,3,3,UglyCone,scan,4,2,0,s"
  50. --
  51. -- --------------------
  52. -- Exemple of data of project file:
  53. -- --------------------
  54. --
  55. -- ex: for 7x3x3 (x,y,z)
  56. -- 1=stone 2=glass
  57. --
  58. -- "       "
  59. -- "   1   "
  60. -- "       "
  61. --
  62. -- "   2   "
  63. -- "   1   "
  64. -- "   2   "
  65. --
  66. -- "   2   "
  67. -- "  212  "
  68. -- "   2   "
  69.  
  70. dataFilePath = "mydata"
  71. urlPhp = "http://sinkir.free.fr/turtle3d/"
  72.  
  73.  
  74. --   _____
  75. --  |  ___|   _ _ __   ___
  76. --  | |_ | | | | '_ \ / __|
  77. --  |  _|| |_| | | | | (__
  78. --  |_|   \__,_|_| |_|\___|
  79. --
  80.  
  81.  
  82.  
  83. function checkLabel()
  84.     if(os.getComputerLabel() == nil)then
  85.         os.setComputerLabel(httpget("turtlegetlabel"))
  86.     end
  87. end
  88.  
  89. function checkStop()
  90.     if(os.getComputerLabel() == nil)then
  91.         if(httpget("turtlegetstop") == "1")then
  92.             sleep(30)
  93.             os.reboot()
  94.         end
  95.     else
  96.         if(httpget("turtlegetstop&label="..os.getComputerLabel()) == "1")then
  97.             sleep(30)
  98.             os.reboot()
  99.         end
  100.     end
  101.  
  102.  
  103. end
  104.  
  105. function httpget(param)
  106.     local sExample = http.get(urlPhp.."?a="..param) --Get contents of page
  107.     --sleep(2)
  108.     --print(param)
  109.     if(sExample == nil)then
  110.         print("sE nil sleep and retry")
  111.         sleep(2)
  112.         return httpget(param)
  113.     end
  114.     local txt = sExample.readAll()
  115.     sExample.close()
  116.  
  117.      --Just in case
  118.     sleep(0.2)
  119.     --print(txt)
  120.     return txt
  121. end
  122.  
  123.  
  124. function testFuel()
  125.     if(fuel() < 10)then
  126.         if(count(16) == 0)then
  127.             print("slot 16 empty")
  128.             sleep(20)
  129.             os.reboot()
  130.         end
  131.         print('Plus de coco, test de refuel')
  132.         while(turtle.detectUp())do
  133.             turtle.digUp()
  134.             sleep(1)
  135.         end
  136.         select(16)
  137.         turtle.placeUp()
  138.         sleep(1)
  139.         --print('Placed, sucking..')
  140.         if(turtle.suckUp() == false)then
  141.             turtle.digUp()
  142.             print("Suck fuel false")
  143.             sleep(20)
  144.             os.reboot()
  145.         end
  146.         turtle.refuel()
  147.         turtle.digUp()
  148.     end
  149.     return true
  150. end
  151.  
  152. function go()
  153.     select(1)
  154.     if(turtle.detect()==true)then
  155.         if(turtle.dig()==false)then
  156.             return false
  157.         else
  158.             sleep(1)
  159.             if(turtle.detect()==true)then
  160.                 while(i<50)do
  161.                     i=i+1
  162.                     if(turtle.dig()==true)then
  163.                         sleep(1)
  164.                         if(turtle.forward()==true)then
  165.                             return true
  166.                         else
  167.                             return false
  168.                         end
  169.                     end
  170.                     sleep(0.2)
  171.                 end
  172.             else
  173.                 if(turtle.forward()==true)then
  174.                     return true
  175.                 else
  176.                     return false
  177.                 end
  178.             end
  179.         end
  180.     else
  181.         if(turtle.forward()==true)then
  182.             return true
  183.         else
  184.             while(i<50)do
  185.                 i=i+1
  186.                 turtle.attack()
  187.                 sleep(0.2)
  188.                
  189.             end
  190.             if(turtle.forward()==true)then
  191.                 return true
  192.             else
  193.                 return false
  194.             end
  195.            
  196.         end
  197.     end
  198.  
  199.     return false
  200. end
  201.  
  202.  
  203. function down()
  204.     select(1)
  205.     if(turtle.detectDown()==true)then
  206.         if(turtle.digDown()==false)then
  207.             return false
  208.         else
  209.             sleep(1)
  210.             if(turtle.detectDown()==true)then
  211.                 while(i<50)do
  212.                     i=i+1
  213.                     if(turtle.digDown()==true)then
  214.                         sleep(1)
  215.                         if(turtle.down()==true)then
  216.                             return true
  217.                         else
  218.                             return false
  219.                         end
  220.                     end
  221.                     sleep(0.2)
  222.                 end
  223.             else
  224.                 if(turtle.down()==true)then
  225.                     return true
  226.                 else
  227.                     return false
  228.                 end
  229.             end
  230.         end
  231.     else
  232.         if(turtle.down()==true)then
  233.             return true
  234.         else
  235.             while(i<50)do
  236.                 i=i+1
  237.                 turtle.attackDown()
  238.                 sleep(0.2)
  239.                
  240.             end
  241.             return false
  242.         end
  243.     end
  244.  
  245.     return false
  246. end
  247.  
  248. function up()
  249.     select(1)
  250.     if(turtle.detectUp()==true)then
  251.         if(turtle.digUp()==false)then
  252.             return false
  253.         else
  254.             sleep(1)
  255.             if(turtle.detectUp()==true)then
  256.                 while(i<50)do
  257.                     i=i+1
  258.                     if(turtle.digUp()==true)then
  259.                         sleep(1)
  260.                         if(turtle.up()==true)then
  261.                             return true
  262.                         else
  263.                             return false
  264.                         end
  265.                     end
  266.                     sleep(0.2)
  267.                 end
  268.             else
  269.                 if(turtle.up()==true)then
  270.                     return true
  271.                 else
  272.                     return false
  273.                 end
  274.             end
  275.         end
  276.     else
  277.         if(turtle.up()==true)then
  278.             return true
  279.         else
  280.             while(i<50)do
  281.                 i=i+1
  282.                 turtle.attackUp()
  283.                 sleep(0.2)
  284.                
  285.             end
  286.             return false
  287.         end
  288.     end
  289.  
  290.     return false
  291. end
  292.  
  293.  
  294.  
  295.  
  296.  
  297. function downScaner()
  298.     checkInvScaner()
  299.     local flag = false
  300.     local i = 0
  301.     if(turtle.detectDown()==true)then
  302.         for i=8,14 do
  303.             if(count(i)>0)then
  304.                 select(i)
  305.                 if(turtle.compareDown()==true)then
  306.                     addChar(i-7)
  307.                     flag = true
  308.                     i =15
  309.                 end
  310.             end
  311.         end
  312.         if(flag == false)then
  313.             print("Unknow block")
  314.             addChar("0")
  315.         end
  316.         select(1)
  317.         turtle.digDown()
  318.     else
  319.         addChar("0")
  320.     end
  321.  
  322.     return true
  323. end
  324.  
  325.  
  326. function addChar(c)
  327.     c = tostring(c)
  328.     local tmp = ""
  329.     if(fs.exists(dataProjectFilePath))then
  330.         tmp = fileGet(dataProjectFilePath)
  331.         fileSet(dataProjectFilePath, tmp..c)
  332.     else
  333.  
  334.         fileSet(dataProjectFilePath, c)
  335.     end
  336. end
  337. function addNames(slot, name)
  338.     slot = tostring(slot - 7)
  339.     if(fs.exists(dataProjectFilePath.."names"))then
  340.         tmp = fileGet(dataProjectFilePath.."names")
  341.         fileSet(dataProjectFilePath.."names", tmp..slot..","..name.."-")
  342.     else
  343.         fileSet(dataProjectFilePath.."names", slot..","..name.."-")
  344.     end
  345. end
  346.  
  347.  
  348.  
  349. function suck(dir)
  350.     local flag = false
  351.     if(dir == "go")then
  352.         flag = turtle.suck(64)
  353.     elseif(dir == "up")then
  354.         flag = turtle.suckUp(64)
  355.     elseif(dir == "down")then
  356.         flag = turtle.suckDown(64)
  357.     end
  358.    
  359.     if(flag == false)then
  360.         return false
  361.     end
  362.     return true
  363. end
  364.  
  365.  
  366. --
  367. --
  368. left = function()
  369.     if(turtle.turnLeft()==false)then
  370.         sleep(1)
  371.         left()
  372.     else
  373.         return true
  374.     end
  375. end
  376. right = function()
  377.     if(turtle.turnRight()==false)then
  378.         sleep(1)
  379.         right()
  380.     else
  381.         return true
  382.     end
  383. end
  384. count = function(id)
  385.     return turtle.getItemCount(id)
  386. end
  387. back = function()
  388.     return turtle.back()
  389. end
  390. select = function(id)
  391.     return turtle.select(id)
  392. end
  393. fuel = function()
  394.     return turtle.getFuelLevel()
  395. end
  396. move = function(id, nb)
  397.     return turtle.transferTo(id, nb)
  398. end
  399. --
  400. --
  401.  
  402. function fileGet(path)
  403.     local tabFile
  404.     if(fs.exists(path))then
  405.         tabFile = fs.open(path, "r")
  406.         if tabFile then
  407.             text = tabFile.readAll()
  408.             tabFile.close()
  409.         end
  410.         return text
  411.     else
  412.         print("fileGet() File not found.")
  413.         print(path)
  414.         return false
  415.     end
  416. end
  417. function fileSet(path, text)
  418.     local tabFile
  419.     if(fs.isReadOnly(path))then
  420.         print("fileSet() File is read only.")
  421.         print(path)
  422.         return false
  423.     else
  424.         tabFile = fs.open(path, "w")
  425.         if tabFile then
  426.             tabFile.write(text)
  427.             tabFile.close()
  428.         end
  429.         return true
  430.     end
  431. end
  432. function split(str, pat)
  433.     -- source of the function :
  434.     -- http://lua-users.org/wiki/SplitJoin
  435.     -- Compatibility: Lua-5.1
  436.     local t = {}  -- NOTE: use {n = 0} in Lua-5.0
  437.     local fpat = "(.-)" .. pat
  438.     local last_end = 1
  439.     local s, e, cap = str:find(fpat, 1)
  440.     while s do
  441.         if s ~= 1 or cap ~= "" then
  442.             table.insert(t,cap)
  443.         end
  444.         last_end = e+1
  445.         s, e, cap = str:find(fpat, last_end)
  446.     end
  447.     if last_end <= #str then
  448.         cap = str:sub(last_end)
  449.         table.insert(t, cap)
  450.     end
  451.     return t
  452. end
  453. function printTab(tab)
  454.     for key, value in pairs(tab) do
  455.         print("[".. key .."]"..value.."")  
  456.     end
  457. end
  458.  
  459. --
  460. --
  461.  
  462.  
  463.  
  464. function checkSlotVideScaner()
  465.     if(count(6) == 0 and count(7) == 0)then
  466.         return true
  467.     end
  468.     return false
  469. end
  470.  
  471. function checkInvScaner()
  472.     -- check si il reste un slot de vide
  473.     if(checkSlotVideScaner() == false) then
  474.         if(videInvScaner()==false)then
  475.             return false
  476.         end
  477.     end
  478.     return true
  479. end
  480.  
  481.  
  482. function videInvScaner()
  483.     local i = 0
  484.    
  485.     while(turtle.detectUp())do
  486.         turtle.digUp()
  487.         sleep(1)
  488.     end
  489.     select(15)
  490.     if(turtle.placeUp() == false)then
  491.         print("turtle.placeUp false")
  492.         sleep(20)
  493.         os.reboot()
  494.     end
  495.     sleep(0.2)
  496.     for i=1,7 do
  497.         if(count(i)>0)then
  498.             select(i)
  499.             turtle.dropUp(count(i))
  500.         end
  501.     end
  502.     select(15)
  503.     turtle.digUp()
  504.     return true
  505. end
  506.  
  507.  
  508.  
  509. function initScan()
  510.     local input = ""
  511.     if(count(16) == 0)then
  512.         print("No ender chest for fuel in slot 16.., exit")
  513.         return false
  514.     end
  515.     if(count(15) == 0)then
  516.         print("No ender chest for dump resources in slot 15, exit")
  517.         return false
  518.     end
  519.     print("plz only 'A to z' no space")
  520.     for i=8,14 do
  521.         if(count(i)>0)then
  522.             select(i)
  523.             print("Add a name for the slot "..i.."")
  524.             input = read()
  525.             addNames(i, input)
  526.         end
  527.     end
  528.     shaundy("newproject")
  529.  
  530.     return true
  531. end
  532.  
  533. function getNames()
  534.     local tab = split(fileGet(dataProjectFilePath.."names"), "-")
  535.     return tab
  536. end
  537.  
  538. function initPrint()
  539.     local r = {}
  540.     local t = {}
  541.     local slotId = ""
  542.     local slotName = ""
  543.     if(count(16) == 0)then
  544.         print("No ender chest for fuel in slot 16.., exit")
  545.         return false
  546.     end
  547.     if(count(15) == 0)then
  548.         print("No ender chest for dump resources in slot 15, exit")
  549.         return false
  550.     end
  551.    
  552.     print("getting data from project "..projectName)
  553.     if(shaundy("getproject") == false)then
  554.         return false
  555.     end
  556.     getGlobals()
  557.     --posZ = sizeZ-1
  558.     setGlobals()
  559.     if(shaundy("getdata") == false)then
  560.         return false
  561.     end
  562.    
  563.    
  564.     r = getNames()
  565.     for k,v in pairs(r) do
  566.         t = split((v), ",")
  567.         print("EndChest slot"..(tonumber(t[1]) + 7).." of "..t[2])
  568.     end
  569.     print("Write 'ok' when ready")
  570.     input = read()
  571.     if(input == "ok")then
  572.         return true
  573.     else
  574.         shell.exit()
  575.     end
  576.  
  577.     return true
  578. end
  579.  
  580.  
  581. function init()
  582.     local input = ""
  583.     print("Hi ! 3D printer and scaner on duty\n")
  584.     print("scan or print ?")
  585.     input = read()
  586.     if(input == "print")then
  587.         scanOrPrint = "print"
  588.     else
  589.         scanOrPrint = "scan"
  590.  
  591.         print("X size ?")
  592.         input = read()
  593.         sizeX = tonumber(input)
  594.        
  595.         print("Y size ?")
  596.         input = read()
  597.         sizeY = tonumber(input)
  598.        
  599.         print("Z size ?")
  600.         input = read()
  601.         sizeZ = tonumber(input)
  602.     end
  603.    
  604.     print("Project name ? (no special char plz)")
  605.     input = read()
  606.     projectName = tostring(input)
  607.     dataProjectFilePath = "p"..projectName
  608.  
  609.    
  610.    
  611.    
  612.     if(scanOrPrint == "print")then
  613.         -- 3D PRINTER FUNCTION :
  614.         print("s16 endchest Fuel       +-+-+-+-+")
  615.         print("s15 endchest dump Resou | | | | |")
  616.         print("s8-14 ender Chest resou | | | |c|")
  617.         print("s1-7  store resources   |c|c|c|c|")
  618.         print("                        |c|c|R|F|")
  619.         print("                        +-+-+-+-+")
  620.     else
  621.         -- 3D SCANER FUNCTION :
  622.         print("Set up inventory like this :")
  623.         print("s16 endchest Fuel       +-+-+-+-+")
  624.         print("s15 endchest dump Resou | | | | |")
  625.         print("s8-14 resources Compare | | | |c|")
  626.         print("s1-7 slots for mining   |c|c|c|c|")
  627.         print("                        |c|c|R|F|")
  628.         print("                        +-+-+-+-+")
  629.        
  630.        
  631.         print("Write 'ok' when ready")
  632.         input = read()
  633.         if(input == "ok")then
  634.             print("saving data in "..dataFilePath)
  635.             fileSet(dataFilePath, tostring(sizeX)..","..tostring(sizeY)..","..tostring(sizeZ)..","..projectName..","..scanOrPrint..",0,0,0,n")
  636.         else
  637.             shell.exit()
  638.         end
  639.        
  640.        
  641.     end
  642.    
  643. end
  644.  
  645. function getGlobals()
  646.     local r = {}
  647.     local tab = split(fileGet(dataFilePath), ",")
  648.  
  649.     sizeX = tonumber(tab[1])
  650.     sizeY = tonumber(tab[2])
  651.     sizeZ = tonumber(tab[3])
  652.     projectName = tab[4]
  653.     scanOrPrint = tab[5]
  654.     posX = tonumber(tab[6])
  655.     posY = tonumber(tab[7])
  656.     posZ = tonumber(tab[8])
  657.     facing = tab[9]
  658.  
  659.  
  660. end
  661.  
  662. function getmygoto()
  663.     if(fs.exists("mygoto") == false)then
  664.         return false
  665.     end
  666.     local tx = fileGet("mygoto")
  667.     if(tx == "")then
  668.         fs.delete("mygoto")
  669.         sleep(0.2)
  670.         if(fs.exists("mygoto"))then
  671.             print("Fukin fs.delete de merde")
  672.             print("Write 'fuck' plz")
  673.             input = read()
  674.             if(input == "fuck")then
  675.                 print("ty :'(")
  676.                 sleep(2)
  677.                 shell.exit()
  678.             else
  679.                 sleep(20)
  680.                 shell.exit()
  681.             end        
  682.         end
  683.         return false
  684.     end
  685.     local tab = split(tx , ",")
  686.     fakeX = tonumber(tab[1])
  687.     fakeY = tonumber(tab[2])
  688.     fakeZ = tonumber(tab[3])
  689.     fakeFacing = tab[4]
  690.     fakeC = tab[5]
  691. end
  692.  
  693.  
  694.  
  695. function setGlobals()
  696.     --print("setGlobals")
  697.     fileSet(dataFilePath, tostring(sizeX)..","..tostring(sizeY)..","..tostring(sizeZ)..","..projectName..","..scanOrPrint..","..tostring(posX)..","..tostring(posY)..","..tostring(posZ)..","..facing)
  698. end
  699.  
  700. function isPair(n)
  701.     if(n == 0)then
  702.         return true
  703.     end
  704.     if(n % 2 == 0)then
  705.         return true
  706.     else
  707.         return false
  708.     end
  709. end
  710.  
  711. function finis()
  712.     if(scanOrPrint == "scan")then
  713.         shaundy("sendLine")
  714.         shaundy("sendEnd")
  715.     end
  716.  
  717.     sleep(0.2)
  718.     fileSet(dataFilePath, "")
  719.     sleep(0.2)
  720.     fs.delete(dataFilePath)
  721.    
  722.  
  723.     sleep(0.2)
  724.     fileSet(dataProjectFilePath, "")
  725.     sleep(0.2)
  726.     fs.delete(dataProjectFilePath)
  727.    
  728.  
  729.     sleep(0.2)
  730.     fileSet(dataProjectFilePath.."names", "")
  731.     sleep(0.2)
  732.     fs.delete(dataProjectFilePath.."names")
  733.     sleep(0.2)
  734.     fs.delete("mygoto")
  735.  
  736.     sleep(0.2)
  737.     fs.delete("names")
  738.  
  739.     sleep(0.2)
  740.     fs.delete(dataFilePath)
  741.     fs.delete(dataFilePath)
  742.     fs.delete(dataFilePath)
  743.     fs.delete(dataFilePath)
  744.  
  745.     print("Over exit")
  746.     shell.exit()
  747. end
  748.  
  749.  
  750.  
  751. function shaundy(order)
  752.     print("shaundy "..order)
  753.     --sleep(2)
  754.     local input = ""
  755.     if(order == "newproject")then
  756.         if(httpget("turtle&do=newproject&projectname="..projectName.."&sizeX="..sizeX.."&sizeY="..sizeY.."&sizeZ="..sizeZ.."&names="..fileGet(dataProjectFilePath.."names")) == "ok")then
  757.             return true
  758.         else
  759.             print("http newproject false sleep(30)")
  760.             sleep(30)
  761.             return shaundy("newproject")
  762.         end
  763.     end
  764.     if(order == "sendLine")then
  765.         if(scanOrPrint == "scan")then
  766.             if(httpget("turtle&do=line&projectname="..projectName.."&posY="..posY.."&data="..fileGet(dataProjectFilePath)) == "ok")then
  767.                 --print("fileSet shaundy(sendLine)")
  768.                 fileSet(dataProjectFilePath, "")
  769.                 return true
  770.             else
  771.                 print("http sendLine false sleep(30)")
  772.                 sleep(30)
  773.                 return shaundy("sendLine")
  774.             end
  775.  
  776.         end
  777.     end
  778.     if(order == "sendNewLine")then
  779.         if(scanOrPrint == "scan")then
  780.             if(httpget("turtle&do=newline&projectname="..projectName.."&posZ="..posZ) == "ok")then
  781.                 return true
  782.             else
  783.                 print("http sendNewLine false sleep(30)")
  784.                 sleep(30)
  785.                 return shaundy("sendNewLine")
  786.             end
  787.         else
  788.             return shaundy("getdata")
  789.         end
  790.     end
  791.     if(order == "sendEnd")then
  792.         if(httpget("turtle&do=end&projectname="..projectName) == "ok")then
  793.             return true
  794.         else
  795.             print("http sendEnd false sleep(30)")
  796.             sleep(30)
  797.             return shaundy("sendEnd")
  798.         end
  799.     end
  800.    
  801.     if(order == "getproject")then
  802.         input = httpget("turtle&do=getproject&projectname="..projectName)
  803.         --print("fileSet shaundy(getproject)")
  804.         fileSet(dataFilePath, input)
  805.         input = httpget("turtle&do=getprojectnames&projectname="..projectName)
  806.         --print("fileSet shaundy(getprojectnames)")
  807.         fileSet(dataProjectFilePath.."names", input)
  808.  
  809.     end
  810.     if(order == "getdata")then
  811.         --getGlobals()
  812.         if(fakeZ >= sizeZ-1) then
  813.             finis()
  814.         end
  815.        
  816.         input = httpget("turtle&do=getdata&projectname="..projectName.."&z="..((sizeZ-1) - fakeZ))
  817.         --input = httpget("turtle&do=getdata&projectname="..projectName.."&z="..(fakeZ))
  818.         --print("getdata : "..input)
  819.  
  820.         fileSet(dataProjectFilePath, input)
  821.     end
  822. end
  823.  
  824. function testInvPrint()
  825.     local i=0
  826.     local counter = 0
  827.     for i=1, 14 do
  828.         if(count(i) == 0)then
  829.             counter = counter + 1
  830.         end
  831.     end
  832.     if(counter < 2)then
  833.         --videInvPrint
  834.         while(turtle.detectUp())do
  835.             turtle.digUp()
  836.             sleep(1)
  837.         end
  838.         select(15)
  839.         turtle.placeUp()
  840.         sleep(1)
  841.         for i=8, 14 do
  842.             if(count(i) > 1)then
  843.                 select(i)
  844.                 turtle.dropUp()
  845.             end
  846.         end
  847.         select(15) 
  848.         sleep(1)
  849.        
  850.         turtle.digUp()
  851.     end
  852. end
  853.  
  854.  
  855.  
  856.  
  857.  
  858. function printTest()
  859.     local c = ""
  860.     local i = 0
  861.     testInvPrint()
  862.  
  863.     if(turtle.detectDown()==true)then
  864.         turtle.digDown()
  865.     end
  866.    
  867.    
  868.  
  869.  
  870.     c = tonumber(fakeC)
  871.     if(c ~= nil and c > 0 and c < 8)then
  872.         if(count(c) < 2)then
  873.             select(c+7)
  874.             if(turtle.compareTo(c)==true)then
  875.                 turtle.transferTo(c, count(c+7)-1)
  876.             else
  877.                 while(turtle.detectDown())do
  878.                     turtle.digDown()
  879.                     sleep(1)
  880.                 end
  881.                 turtle.placeDown()
  882.                 select(c)
  883.                 sleep(1)
  884.                 if(turtle.suckDown(turtle.getItemSpace(c)) == false)then
  885.                     print("suckDown false sleep 30s")
  886.                     select(c+7)
  887.                     turtle.digDown()
  888.                     sleep(30)
  889.                     os.reboot()
  890.                 end
  891.                 select(c+7)
  892.                 turtle.digDown()               
  893.             end
  894.  
  895.         end
  896.         select(c)
  897.         turtle.placeDown() 
  898.     end
  899.    
  900.        
  901.     return true
  902.    
  903. end
  904.  
  905. function savemygoto()
  906.     print("savemygoto :"..fakeX..","..fakeY..","..fakeZ..","..fakeFacing..","..fakeC)
  907.     --sleep(3)
  908.     local tab = split(fileGet(dataProjectFilePath), "\n")
  909.     local out = ""
  910.     for i=1, table.getn(tab) do
  911.         if((fakeY+1) == i)then
  912.             if(fakeX == 0)then
  913.                 out = out.."0"..string.sub(tab[i],2).."\n"
  914.             elseif(fakeX == string.len(tab[i])-1)then
  915.                 out = out..string.sub(tab[i],1, string.len(tab[i])-1).."0".."\n"
  916.             else
  917.                 out = out..string.sub(tab[i],1, fakeX).."0"..string.sub(tab[i], fakeX+2).."\n"
  918.             end
  919.         else
  920.             out = out..tab[i].."\n"
  921.         end
  922.     end
  923.    
  924.     fileSet(dataProjectFilePath, out)
  925.     fileSet("mygoto", fakeX..","..fakeY..","..fakeZ..","..fakeFacing..","..fakeC)
  926. end
  927.  
  928.  
  929. function mygoto()
  930.     --print("mygoto"..fakeX..","..fakeY..","..fakeZ..","..fakeFacing)
  931.     --print("mygoto"..posX..","..posY..","..posZ..","..facing)
  932.     --sleep(5)
  933.     testFuel()
  934.     testInvPrint()
  935.  
  936.     if(posZ < fakeZ)then
  937.         while(up()==false)do
  938.             sleep(5)
  939.         end
  940.         posZ = posZ + 1
  941.         setGlobals()
  942.         return true
  943.     end
  944.    
  945.     if(facing == "n")then
  946.         if(posX < fakeX)then
  947.             while(go()==false)do
  948.                 sleep(5)
  949.             end
  950.             posX = posX + 1
  951.             setGlobals()
  952.             return true        
  953.         end    
  954.     end
  955.     if(facing == "s")then
  956.         if(posX > fakeX)then
  957.             while(go()==false)do
  958.                 sleep(5)
  959.             end
  960.             posX = posX - 1
  961.             setGlobals()
  962.             return true        
  963.         end    
  964.     end
  965.     if(facing == "e")then
  966.         if(posY < fakeY)then
  967.             while(go()==false)do
  968.                 sleep(5)
  969.             end
  970.             posY = posY + 1
  971.             setGlobals()
  972.             return true        
  973.         end    
  974.     end
  975.     if(facing == "w")then
  976.         if(posY > fakeY)then
  977.             while(go()==false)do
  978.                 sleep(5)
  979.             end
  980.             posY = posY - 1
  981.             setGlobals()
  982.             return true        
  983.         end    
  984.     end
  985.  
  986.    
  987.    
  988.     if(facing == "n")then
  989.         if(posY < fakeY)then
  990.             right()
  991.             facing = "e"
  992.             setGlobals()
  993.             return true
  994.         elseif(posY > fakeY)then
  995.             left()
  996.             facing = "w"       
  997.             setGlobals()
  998.             return true
  999.         end        
  1000.     end
  1001.     if(facing == "s")then
  1002.         if(posY < fakeY)then
  1003.             left()
  1004.             facing = "e"
  1005.             setGlobals()
  1006.             return true
  1007.         elseif(posY > fakeY)then
  1008.             right()
  1009.             facing = "w"       
  1010.             setGlobals()
  1011.             return true
  1012.         end    
  1013.     end
  1014.     if(facing == "e")then
  1015.         if(posX < fakeX)then
  1016.             left()
  1017.             facing = "n"
  1018.             setGlobals()
  1019.             return true
  1020.         elseif(posX > fakeX)then
  1021.             right()
  1022.             facing = "s"       
  1023.             setGlobals()
  1024.             return true
  1025.         end        
  1026.     end
  1027.     if(facing == "w")then
  1028.         if(posX < fakeX)then
  1029.             right()
  1030.             facing = "n"
  1031.             setGlobals()
  1032.             return true
  1033.         elseif(posX > fakeX)then
  1034.             left()
  1035.             facing = "s"       
  1036.             setGlobals()
  1037.             return true
  1038.         end        
  1039.     end
  1040.     if(fakeX == posX and fakeY == posY and fakeZ == posZ)then
  1041.         print("fs.delete(mygoto)")
  1042.    
  1043.         fs.delete("mygoto")
  1044.         sleep(0.2)
  1045.         if(fs.exists("mygoto"))then
  1046.             print("Fukin fs.delete de merde")
  1047.             print("Write 'fuck' plz")
  1048.             input = read()
  1049.             if(input == "fuck")then
  1050.                 print("ty :'(")
  1051.                 sleep(2)
  1052.                 shell.exit()
  1053.             else
  1054.                 sleep(20)
  1055.                 shell.exit()
  1056.             end        
  1057.         end
  1058.         return true
  1059.     end
  1060.    
  1061.    
  1062.     if(facing == "n")then
  1063.         right()
  1064.         facing = "e"
  1065.         setGlobals()
  1066.         return false
  1067.  
  1068.     end
  1069.     if(facing == "s")then
  1070.         left()
  1071.         facing = "e"
  1072.         setGlobals()
  1073.         return false
  1074.     end
  1075.     if(facing == "e")then
  1076.         left()
  1077.         facing = "n"
  1078.         setGlobals()
  1079.         return false
  1080.     end
  1081.     if(facing == "w")then
  1082.         right()
  1083.         facing = "n"
  1084.         setGlobals()
  1085.         return false   
  1086.     end
  1087.    
  1088.    
  1089.    
  1090.     return false
  1091. end
  1092.  
  1093.  
  1094.  
  1095. function gpsScan()
  1096.     if(isPair(posZ))then -- si Z est pair (on s'ecarte de Y)
  1097.         if(isPair(posY))then -- si Y est pair (on s'ecarte de X)
  1098.             if(facing == "n" and posX == sizeX - 1 and posY == sizeY - 1)then -- time to get down
  1099.                 print("get down ")
  1100.                 if(posZ == sizeZ - 1)then
  1101.                     finis()
  1102.                 end
  1103.                 left()
  1104.                 facing = "w"
  1105.                 setGlobals()
  1106.                 shaundy("sendLine") ---------------------
  1107.                 if(down())then
  1108.                     posZ = posZ + 1
  1109.                     setGlobals()
  1110.                     shaundy("sendNewLine") ---------------------
  1111.                 else
  1112.                     return false
  1113.                 end                                
  1114.                
  1115.             elseif(facing == "n")then
  1116. -- 1
  1117.                 if(posX < sizeX - 1)then
  1118.                     if(go())then
  1119.                         posX = posX + 1
  1120.                         setGlobals()
  1121.                     else
  1122.                         return false
  1123.                     end
  1124.                 else
  1125.                     right()
  1126.                     facing = "e"
  1127.                     setGlobals()
  1128.                     shaundy("sendLine") ---------------------
  1129.                     if(go())then
  1130.                         posY = posY + 1
  1131.                         setGlobals()
  1132.                     else
  1133.                         return false
  1134.                     end
  1135.                 end
  1136.            
  1137.             elseif(facing == "e")then
  1138. -- 2
  1139.                 if(posX == 0)then
  1140.                     left()
  1141.                     facing = "n"
  1142.                     setGlobals()
  1143.                     if(go())then
  1144.                         posX = posX + 1
  1145.                         setGlobals()
  1146.                     else
  1147.                         return false
  1148.                     end
  1149.                 end
  1150.             end
  1151.         else -- si Y est impaire (on s'approhe X)
  1152.             if(facing == "s" and posX == 0 and posY == sizeY - 1)then -- time to get down
  1153.                 print("get down ")
  1154.                 if(posZ == sizeZ - 1)then
  1155.                     finis()
  1156.                 end
  1157.                 right()
  1158.                 facing = "w"
  1159.                 setGlobals()
  1160.                 shaundy("sendLine") ---------------------
  1161.                 if(down())then
  1162.                     posZ = posZ + 1
  1163.                     setGlobals()
  1164.                     shaundy("sendNewLine") ---------------------
  1165.                 else
  1166.                     return false
  1167.                 end
  1168.             elseif(facing == "s")then
  1169. -- 3
  1170.                 if(posX > 0)then
  1171.                     if(go())then
  1172.                         posX = posX - 1
  1173.                         setGlobals()
  1174.                     else
  1175.                         return false
  1176.                     end
  1177.                 else
  1178.                     left()
  1179.                     facing = "e"
  1180.                     setGlobals()
  1181.                     shaundy("sendLine") ---------------------
  1182.                     if(go())then
  1183.                         posY = posY + 1
  1184.                         setGlobals()
  1185.                     else
  1186.                         return false
  1187.                     end
  1188.                 end
  1189.             elseif(facing == "e")then
  1190. -- 4
  1191.                 if(posX == sizeX - 1)then
  1192.                     right()
  1193.                     facing = "s"
  1194.                     setGlobals()
  1195.                     if(go())then
  1196.                         posX = posX - 1
  1197.                         setGlobals()
  1198.                     else
  1199.                         return false
  1200.                     end            
  1201.                 end
  1202.             end
  1203.        
  1204.         end
  1205.     else -- si Z est impaire (on s'approhe Y)
  1206.         if(isPair(posY))then -- si Y est pair (on s'approche de X)
  1207.             if(facing == "s" and posX == 0 and posY == 0)then -- time to get down
  1208.                 print("get down ")
  1209.                 if(posZ == sizeZ - 1)then
  1210.                     finis()
  1211.                 end
  1212.                 left()
  1213.                 facing = "e"
  1214.                 setGlobals()
  1215.                 shaundy("sendLine") ---------------------
  1216.                 if(down())then
  1217.                     posZ = posZ + 1
  1218.                     setGlobals()
  1219.                     shaundy("sendNewLine") ---------------------
  1220.                 else
  1221.                     return false
  1222.                 end
  1223.             elseif(facing == "s")then
  1224. -- 5
  1225.                 if(posX > 0)then
  1226.                     if(go())then
  1227.                         posX = posX - 1
  1228.                         setGlobals()
  1229.                     else
  1230.                         return false
  1231.                     end
  1232.                 else
  1233.                     right()
  1234.                     facing = "w"
  1235.                     setGlobals()
  1236.                     shaundy("sendLine") ---------------------
  1237.                     if(go())then
  1238.                         posY = posY - 1
  1239.                         setGlobals()
  1240.                     else
  1241.                         return false
  1242.                     end
  1243.                 end
  1244.            
  1245.             elseif(facing == "w")then
  1246. -- 6
  1247.                 if(posX == sizeX - 1)then
  1248.                     left()
  1249.                     facing = "s"
  1250.                     setGlobals()
  1251.                     if(go())then
  1252.                         posX = posX - 1
  1253.                         setGlobals()
  1254.                     else
  1255.                         return false
  1256.                     end    
  1257.                 end
  1258.             end
  1259.         else -- si Y est impaire (on s'ecarte X)
  1260.             if(facing == "s" and posX == 0 and posY == 0)then -- time to get down
  1261.                 print("get down ")
  1262.                 if(posZ == sizeZ - 1)then
  1263.                     finis()
  1264.                 end
  1265.                 left()
  1266.                 facing = "e"
  1267.                 setGlobals()
  1268.                 shaundy("sendLine") ---------------------
  1269.                 if(down())then
  1270.                     posZ = posZ + 1
  1271.                     setGlobals()
  1272.                     shaundy("sendNewLine") ---------------------
  1273.                 else
  1274.                     return false
  1275.                 end
  1276.             elseif(facing == "n")then
  1277. -- 7
  1278.                 if(posX < sizeX - 1)then
  1279.                     if(go())then
  1280.                         posX = posX + 1
  1281.                         setGlobals()
  1282.                     else
  1283.                         return false
  1284.                     end
  1285.                 else
  1286.                     left()
  1287.                     facing = "w"
  1288.                     setGlobals()
  1289.                     shaundy("sendLine") ---------------------
  1290.                     if(go())then
  1291.                         posY = posY - 1
  1292.                         setGlobals()
  1293.                     else
  1294.                         return false
  1295.                     end
  1296.                 end
  1297.            
  1298.             elseif(facing == "w")then
  1299. -- 8
  1300.                 if(posX == 0)then
  1301.                     right()
  1302.                     facing = "n"
  1303.                     setGlobals()
  1304.                     if(go())then
  1305.                         posX = posX + 1
  1306.                         setGlobals()
  1307.                     else
  1308.                         return false
  1309.                     end            
  1310.                 end
  1311.             end
  1312.        
  1313.         end
  1314.     end
  1315.     return true
  1316. end
  1317.    
  1318. function cutDataProj()
  1319.     input = fileGet(dataProjectFilePath)
  1320.  
  1321.     if(isPair(fakeZ))then
  1322.         fileSet(dataProjectFilePath, string.sub(input, 2))
  1323.     else
  1324.         fileSet(dataProjectFilePath, string.sub(input, 0, string.len(input)-1))
  1325.     end
  1326. end
  1327.  
  1328. function getNoZero(str)
  1329.     local c = "0"
  1330.     for i=1, string.len(str) do
  1331.         c = string.sub(str, i,i)   
  1332.         if(c ~= "0")then
  1333.             fakeX = i-1
  1334.             fakeC = c
  1335.             return true
  1336.         end
  1337.     end
  1338.     return false
  1339. end
  1340. function getNoZeroRev(str)
  1341.     local c = "0"
  1342.     for i=string.len(str), 1 , -1 do
  1343.         c = string.sub(str, i,i)   
  1344.         if(c ~= "0")then
  1345.             fakeX = i-1
  1346.             fakeC = c
  1347.             return true
  1348.         end
  1349.     end
  1350.     return false
  1351. end
  1352.    
  1353. function gpsPrint()
  1354.     fakeX = 0
  1355.     fakeY = 0
  1356.     local tab = split(fileGet(dataProjectFilePath), "\n")
  1357.    
  1358.     if(isPair(fakeZ))then
  1359.         for i=1, table.getn(tab) do
  1360.             fakeY = i-1
  1361.             if(isPair(fakeY))then
  1362.                 if(getNoZero(tab[i]) == true)then
  1363.                     return savemygoto()
  1364.                 end
  1365.             else
  1366.                 if(getNoZeroRev(tab[i]) == true)then
  1367.                     return savemygoto()
  1368.                 end        
  1369.             end
  1370.         end
  1371.     else
  1372.         for i=table.getn(tab), 1, -1 do
  1373.             fakeY = i-1
  1374.             if(isPair(fakeY))then
  1375.                 if(getNoZero(tab[i]) == true)then
  1376.                     return savemygoto()
  1377.                 end
  1378.             else
  1379.                 if(getNoZeroRev(tab[i]) == true)then
  1380.                     return savemygoto()
  1381.                 end        
  1382.             end
  1383.         end
  1384.     end
  1385.      fakeZ = fakeZ+1
  1386.      shaundy("getdata")
  1387.      return gpsPrint()
  1388.    
  1389. end
  1390.  
  1391.  
  1392. --  __  __       _        ____
  1393. -- |  \/  | __ _(_)_ __  / /\ \
  1394. -- | |\/| |/ _` | | '_ \| |  | |
  1395. -- | |  | | (_| | | | | | |  | |
  1396. -- |_|  |_|\__,_|_|_| |_| |  | |
  1397. --                       \_\/_/
  1398.  
  1399.  
  1400. stop=false
  1401.  
  1402. args = { ... }
  1403. if( args[1]~= null)then
  1404.     sleep(0.2)
  1405.     fileSet(dataFilePath, "")
  1406.     sleep(0.2)
  1407.     fs.delete(dataFilePath)
  1408.     sleep(0.2)
  1409.     fileSet("p"..args[1], "")
  1410.     sleep(0.2)
  1411.     fs.delete("p"..args[1])
  1412.     sleep(0.2)
  1413.     fileSet("p"..args[1].."names", "")
  1414.     sleep(0.2)
  1415.     fs.delete("p"..args[1].."names")
  1416.     sleep(0.2)
  1417.     fs.delete("names")
  1418.     sleep(0.2)
  1419.     fs.delete("mygoto")
  1420.     sleep(0.2)
  1421.  
  1422. else
  1423.  
  1424.  
  1425.  
  1426.  
  1427.  
  1428. sizeX = 0
  1429. sizeY = 0
  1430. sizeZ = 0
  1431. projectName = ""
  1432. scanOrPrint = "scan"
  1433. posX = 0
  1434. posY = 0
  1435. posZ = 0
  1436. facing = "n"
  1437.  
  1438. dataProjectFilePath = ""
  1439.  
  1440.  
  1441. if(fs.exists(dataFilePath))then
  1442.     getGlobals()
  1443. else
  1444.     init()
  1445. end
  1446.  
  1447.  
  1448. fakeX = posX
  1449. fakeY = posY
  1450. fakeZ = posZ
  1451. fakeFacing = facing
  1452. fakeC = "0"
  1453.  
  1454. testFuel()
  1455.  
  1456. if(scanOrPrint == "print")then
  1457.     initPrint()
  1458. else
  1459.     initScan() 
  1460. end
  1461.  
  1462. checkLabel()
  1463. i = 0
  1464. stopCounter = 1
  1465. gpsFalseCounter = 0
  1466. if(fs.exists("mygoto"))then
  1467.     if(fakeX == posX and fakeY == posY and fakeZ == posZ and fakeFacing == facing)then
  1468.         getmygoto()
  1469.     end    
  1470. end
  1471.  
  1472.  
  1473. while(stop==false)do
  1474.     if(stopCounter < 2)then
  1475.         stopCounter = 25
  1476.         checkStop()
  1477.     end
  1478.     stopCounter = stopCounter - 1
  1479.    
  1480.    
  1481.     if(fs.exists("mygoto"))then
  1482.         mygoto()
  1483.     else
  1484.         if(gpsFalseCounter == 0) then
  1485.             --print("scan/print test")
  1486.             if(scanOrPrint == "scan")then
  1487.                 downScaner()
  1488.                 testFuel()
  1489.             else
  1490.                 testFuel()
  1491.                 printTest()
  1492.             end
  1493.         end
  1494.        
  1495.        
  1496.        
  1497.         if(scanOrPrint == "print")then
  1498.             gpsPrint()
  1499.         else
  1500.             if(gpsScan()==false)then
  1501.                 gpsFalseCounter = gpsFalseCounter + 1
  1502.                 print("gps false "..gpsFalseCounter)
  1503.                 sleep(2)
  1504.             else
  1505.                 gpsFalseCounter = 0
  1506.             end
  1507.         end
  1508.     end
  1509.     sleep(0.2)
  1510. end
  1511.  
  1512. end
Add Comment
Please, Sign In to add comment