Advertisement
kssr3951

chunkDig5 (unfinished)

Feb 21st, 2015
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 20.53 KB | None | 0 0
  1. -- -------------------------------
  2. --
  3. -- -------------------------------
  4. local function showUsage()
  5.   print("chunkDig5")
  6.   print("slot1 : torch x 64")
  7.   print("slot2 : chest x 64")
  8.   print("slot3 : cobblestone x 32")
  9.   print("slot4 : stone       x  1")
  10.   print("slot5 : gravel      x  1")
  11.   print("slot6 : dart        x  1")
  12. end
  13. -- -------------------------------
  14. -- config
  15. -- -------------------------------
  16. local SLOT_TORCH               = 1
  17. local SLOT_CHEST               = 2
  18. local SLOT_COBBLESTONE         = 3
  19. local SLOT_STONE               = 4
  20. local SLOT_GRAVEL              = 5
  21. local SLOT_DART                = 6
  22. local SLOTS_FREE           = { 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }
  23.  
  24. local SLOTS_USELESS_SAMPLE = { SLOT_STONE, SLOT_GRAVEL, SLOT_DART, SLOT_COBBLESTONE }
  25. local SLOTS_KEEP_ALL       = { SLOT_TORCH, SLOT_CHEST }
  26. local SLOTS_KEEP_32        = { SLOT_COBBLESTONE }
  27. local SLOTS_KEEP_1         = { SLOT_STONE, SLOT_GRAVEL, SLOT_DART }
  28.  
  29.  
  30. local INITIAL_HEIGHT = 58
  31. local BOTTOM_HEIGHT  = 5
  32. local LOW_FUEL_LEVEL = 300
  33. local SIZE_LEFT    = 80
  34. local SIZE_FORWARD = 80
  35. -- -------------------------------
  36. -- utility
  37. -- -------------------------------
  38. -- ---------------
  39. -- Logger
  40. -- ---------------
  41. -- do logging?
  42. local DEBUG_LOG            = false
  43. -- local log
  44. local LOCAL_ENABLED        = true
  45. local LOCAL_LOG_FILE_NAME  = "debug.log"
  46. -- remote log
  47. local REMOTE_ENABLED       = false
  48. local REMOTE_ADDR          = 20
  49. local REMOTE_MODEM_DIR     = "right"
  50. local function debug(txt)
  51.   if DEBUG_LOG then
  52.     if LOCAL_ENABLED then
  53.       local hFile
  54.       if fs.exists(LOCAL_LOG_FILE_NAME) then
  55.         hFile = fs.open(LOCAL_LOG_FILE_NAME, "a");
  56.       else
  57.         hFile = fs.open(LOCAL_LOG_FILE_NAME, "w");
  58.       end
  59.       hFile.writeLine(txt);
  60.       hFile.close();
  61.     end
  62.     if REMOTE_ENABLED then
  63.       rednet.open(REMOTE_MODEM_DIR)
  64.       rednet.send(REMOTE_ADDR, txt)
  65.       rednet.close()
  66.     end
  67.   end
  68. end
  69. -- ---------------
  70. -- (common) direction code
  71. -- ---------------
  72. local DIR_FORWARD = 1
  73. local DIR_RIGHT   = 2
  74. local DIR_BACK    = 3
  75. local DIR_LEFT    = 4
  76. local DIR_NOT     = 5
  77. -- ---------------
  78. -- (common) turn code
  79. -- ---------------
  80. local TURN_NOT     = 1
  81. local TURN_LEFT    = 2
  82. local TURN_RIGHT   = 3
  83. local TURN_OPPOSIT = 4
  84. -- ---------------
  85. -- TargetFinder
  86. -- ---------------
  87. local TargetFinder = {
  88.   iterator = function(width, depth)
  89.     findTarget = function(scanX, scanZ, reverse, rangeWidth, rangeDepth)
  90.       local TILE_PATTERN = {"*","b","r","l","f"}
  91.       local SHAPE_DIRECTION = { DIR_NOT, DIR_FORWARD, DIR_LEFT,
  92.                                 DIR_RIGHT, DIR_BACK }
  93.       local idx = ( (scanZ%5) + (scanX%5)*3 )%5 + 1
  94.       local dirChar = TILE_PATTERN[idx]
  95.       if (not reverse and "b" == dirChar) or
  96.          (    reverse and "f" == dirChar) then
  97.         return false
  98.       end
  99.       local DIR_TO_CENTER = {{ dx =  0, dz =  0 }, -- *
  100.                              { dx =  0, dz = -1 }, -- b
  101.                              { dx =  1, dz =  0 }, -- r
  102.                              { dx = -1, dz =  0 }, -- l
  103.                              { dx =  0, dz =  1 }} -- f
  104.       local DIR_TO_NAME = {
  105.         [DIR_FORWARD] = "F",
  106.         [DIR_RIGHT  ] = "R",
  107.         [DIR_BACK   ] = "B",
  108.         [DIR_LEFT   ] = "L",
  109.         [DIR_NOT    ] = "*"}
  110.       local isCenter = false
  111.       local found = false
  112.       local newX, newZ
  113.       local shape = {}
  114.       local shapeDbg = ""
  115.       local centerX = scanX + DIR_TO_CENTER[idx].dx
  116.       local centerZ = scanZ + DIR_TO_CENTER[idx].dz
  117.       local function inRange(posX, posY, width, height)
  118.         return 0 <= posX and posX < width and 0 <= posY and posY < height
  119.       end
  120.       if inRange(centerX, centerZ, rangeWidth, rangeDepth) then
  121.         found    = true
  122.         isCenter = true
  123.         newX = centerX
  124.         newZ = centerZ
  125.       else
  126.         table.insert(shape, DIR_NOT)
  127.         shapeDbg = shapeDbg .. "*"
  128.       end
  129.       local testX, testZ
  130.       for i = 2, 5 do
  131.         testX = centerX - DIR_TO_CENTER[i].dx
  132.         testZ = centerZ - DIR_TO_CENTER[i].dz
  133.         if inRange(testX, testZ, rangeWidth, rangeDepth) then
  134.           if isCenter then
  135.             table.insert(shape, SHAPE_DIRECTION[i])
  136.             shapeDbg = shapeDbg .. DIR_TO_NAME[SHAPE_DIRECTION[i]]
  137.           end
  138.           if not found then
  139.             newX = testX
  140.             newZ = testZ
  141.           end
  142.           found = true
  143.         end
  144.       end
  145.       if not found then
  146.         return false
  147.       end
  148.       return true, newX, newZ, shape, shapeDbg
  149.     end
  150.     local xAxisIterator = function(width)
  151.       local pos = 0
  152.       local loopEnd = math.floor((width + 1) / 3)
  153.       return function()
  154.         local current = pos
  155.         pos = pos + 1
  156.         if loopEnd < current then
  157.           return nil
  158.         else
  159.           return current * 3
  160.         end
  161.       end
  162.     end
  163.     local zAxisIterator = function(x, depth)
  164.       local pos, step
  165.       if 0 == x % 2 then
  166.         pos, step = -1, 1
  167.       else
  168.         pos, step = depth, -1
  169.       end
  170.       return function()
  171.         local current = pos
  172.         pos = pos + step
  173.         if current < -1 or depth < current then
  174.           return nil
  175.         else
  176.           return current
  177.         end
  178.       end
  179.     end
  180.     local xIter = xAxisIterator(width)
  181.     local zIter = nil
  182.     local x
  183.     local previousX
  184.     local previousZ
  185.     return function()
  186.       while true do
  187.         if nil == zIter then
  188.           x = xIter()
  189.           if nil == x then
  190.             return nil
  191.           end
  192.           zIter = zAxisIterator(x, depth)
  193.         end
  194.         local z = zIter()
  195.         if nil == z then
  196.           zIter = nil
  197.         else
  198.           --return x, z
  199.           local found, newX, newZ, shape, shapeDbg
  200.             = findTarget(x, z, 0 == x%2, width, depth)
  201.           if found and (previousX ~= newX or previousZ ~= newZ) then
  202.             previousX = newX
  203.             previousZ = newZ
  204.             return newX, newZ, shape, shapeDbg
  205.           end
  206.         end
  207.       end
  208.     end
  209.   end
  210. }
  211. -- ---------------
  212. -- Move/Dig Functions
  213. -- ---------------
  214. function surelyUp()
  215.   while not turtle.up() do turtle.digUp() end
  216. end
  217. function surelyDown()
  218.   while not turtle.down() do end
  219. end
  220. -- http://hevohevo.hatenablog.com/entry/2014/07/14/213109
  221. function surelyDigUp()
  222.   while turtle.digUp() do
  223.     os.sleep(0.4)
  224.   end
  225. end
  226. -- http://hevohevo.hatenablog.com/entry/2014/07/14/213109
  227. function surelyDig()
  228.   while turtle.dig() do end
  229. end
  230. -- http://hevohevo.hatenablog.com/entry/2014/07/14/213109
  231. function surelyFwd()
  232.   for i=1,4 do
  233.     local status, err = turtle.forward()
  234.     if status then
  235.       return true  -- success!
  236.     elseif err=="Out of fuel" then
  237.       return status, err
  238.     end
  239.  
  240.     surelyDig() -- face to a normal block or a sand(gravel) hill
  241.  
  242.     if turtle.detect() and not turtle.dig() then
  243.       return false, "bedrock!"
  244.     end
  245.  
  246.     if turtle.forward() then return true end -- success!
  247.  
  248.     if turtle.attack() then
  249.       -- face to monster-mob
  250.       while turtle.attack() do end
  251.     else
  252.       -- face to sand-blocks which is dropping long time
  253.       os.sleep(5) -- probably, adjustment is required
  254.     end
  255.   end
  256.   return turtle.forward()
  257. end
  258. -- ---------------
  259. -- MyTurtle
  260. -- ---------------
  261. local MyTurtle = {}
  262. MyTurtle.new = function(initialY)
  263.     local obj = {}
  264.     obj.turtleX = 0
  265.     obj.turtleZ = 0
  266.     obj.turtleY = initialY
  267.     obj.turtleDir = DIR_FORWARD
  268.     return setmetatable(obj, {__index = MyTurtle})
  269.   end
  270. MyTurtle.turnTo = function(self, direction)
  271.     local TURN_RULES = { -- dir_forward, dir_right, dir_back, dir_left
  272.       [DIR_FORWARD] = { TURN_NOT    , TURN_RIGHT  , TURN_OPPOSIT, TURN_LEFT    },
  273.       [DIR_RIGHT  ] = { TURN_LEFT   , TURN_NOT    , TURN_RIGHT  , TURN_OPPOSIT },
  274.       [DIR_BACK   ] = { TURN_OPPOSIT, TURN_LEFT   , TURN_NOT    , TURN_RIGHT   },
  275.       [DIR_LEFT   ] = { TURN_RIGHT  , TURN_OPPOSIT, TURN_LEFT   , TURN_NOT     }}
  276.     local turn = TURN_RULES[self.turtleDir][direction]
  277.     if TURN_LEFT == turn then
  278.       if not SIMULATION then
  279.         turtle.turnLeft()
  280.       end
  281.     elseif TURN_RIGHT == turn then
  282.       if not SIMULATION then
  283.         turtle.turnRight()
  284.       end
  285.     elseif TURN_OPPOSIT == turn then
  286.       if not SIMULATION then
  287.         turtle.turnLeft()
  288.         turtle.turnLeft()
  289.       end
  290.     end
  291.     self.turtleDir = direction
  292.   end
  293. MyTurtle.adjustX = function(self, aimX, withDigUp, beforeEvHandlers, afterEvHandlers)
  294.     if self.turtleX < aimX and DIR_RIGHT ~= self.turtleDir then
  295.       self:turnTo(DIR_RIGHT)
  296.     elseif aimX < self.turtleX and DIR_LEFT ~= self.turtleDir then
  297.       self:turnTo(DIR_LEFT)
  298.     end
  299.     local function sign(val)
  300.       if val == 0 then
  301.         return 0
  302.       else
  303.         return math.abs(val) / val
  304.       end
  305.     end
  306.     while self.turtleX ~= aimX do
  307.       if not SIMULATION then
  308.         surelyFwd()
  309.         if withDigUp then
  310.           surelyDigUp()
  311.         end
  312.       end
  313.       self.turtleX = self.turtleX + sign(aimX - self.turtleX)
  314.     end
  315.   end
  316. MyTurtle.adjustZ = function(self, aimZ, withDigUp, beforeEvHandlers, afterEvHandlers)
  317.     if self.turtleZ < aimZ and DIR_FORWARD ~= self.turtleDir then
  318.       self:turnTo(DIR_FORWARD)
  319.     elseif aimZ < self.turtleZ and DIR_BACK ~= self.turtleDir then
  320.       self:turnTo(DIR_BACK)
  321.     end
  322.     local function sign(val)
  323.       if val == 0 then
  324.         return 0
  325.       else
  326.         return math.abs(val) / val
  327.       end
  328.     end
  329.     while self.turtleZ ~= aimZ do
  330.       if not SIMULATION then
  331.         surelyFwd()
  332.         if withDigUp then
  333.           surelyDigUp()
  334.         end
  335.       end
  336.       self.turtleZ = self.turtleZ + sign(aimZ - self.turtleZ)
  337.     end
  338.   end
  339. MyTurtle.moveTo = function(self, aimX, aimZ, withDigUp, beforeEvHandlers, afterEvHandlers)
  340.     self:adjustZ(aimZ, withDigUp, beforeEvHandlers, afterEvHandlers)
  341.     self:adjustX(aimX, withDigUp, beforeEvHandlers, afterEvHandlers)
  342.   end
  343. MyTurtle.backTo = function(self, aimX, aimZ, withDigUp, beforeEvHandlers, afterEvHandlers)
  344.     self:adjustX(aimX, withDigUp, beforeEvHandlers, afterEvHandlers)
  345.     self:adjustZ(aimZ, withDigUp, beforeEvHandlers, afterEvHandlers)
  346.   end
  347. -- ---------------
  348. -- Revolving digging
  349. -- ---------------
  350. local function verticalMiningAction(_myT, _shape, _negativeSampleSlots, _digAny)
  351.   local turnToNearestEdge = function (myT, shape)
  352.     local TURN_COSTS = { [TURN_NOT]   = 0, [TURN_LEFT]    = 1,
  353.                          [TURN_RIGHT] = 2, [TURN_OPPOSIT] = 3 }
  354.     local TURN_RULES = { -- dir_forward, dir_right, dir_back, dir_left
  355.       [DIR_FORWARD] = { TURN_NOT    , TURN_RIGHT  , TURN_OPPOSIT, TURN_LEFT    },
  356.       [DIR_RIGHT  ] = { TURN_LEFT   , TURN_NOT    , TURN_RIGHT  , TURN_OPPOSIT },
  357.       [DIR_BACK   ] = { TURN_OPPOSIT, TURN_LEFT   , TURN_NOT    , TURN_RIGHT   },
  358.       [DIR_LEFT   ] = { TURN_RIGHT  , TURN_OPPOSIT, TURN_LEFT   , TURN_NOT     }}
  359.     local OPPOSIT_DIR = {DIR_BACK, DIR_LEFT, DIR_FORWARD, DIR_LEFT}
  360.     local turnMinCost = 99
  361.     local smallestTurnDir = DIR_NOT
  362.     local turnTmp, costTmp
  363.     for _, dir in ipairs(shape) do
  364.       turnTmp = TURN_RULES[myT.turtleDir][dir]
  365.       costTmp = TURN_COSTS[turnTmp]
  366.       if costTmp < turnMinCost then
  367.         turnMinCost = costTmp
  368.         smallestTurnDir = dir
  369.       end
  370.     end
  371.     debug("  [dir] current, smallest = " .. tostring(myT.turtleDir) .. ", " .. tostring(smallestTurnDir))
  372.     myT:turnTo(smallestTurnDir)
  373.   end
  374.   local getTurnFuncName = function(myT, shape)
  375.     local TURN_RELATIVE = { -- turn_left, turn_right
  376.       [DIR_FORWARD] = { [TURN_LEFT] = DIR_LEFT   , [TURN_RIGHT] = DIR_RIGHT   },
  377.       [DIR_RIGHT  ] = { [TURN_LEFT] = DIR_FORWARD, [TURN_RIGHT] = DIR_BACK    },
  378.       [DIR_BACK   ] = { [TURN_LEFT] = DIR_RIGHT  , [TURN_RIGHT] = DIR_LEFT    },
  379.       [DIR_LEFT   ] = { [TURN_LEFT] = DIR_BACK   , [TURN_RIGHT] = DIR_FORWARD }}
  380.     local dirWhenTurnLeft  = TURN_RELATIVE[myT.turtleDir][TURN_LEFT ]
  381.     local dirWhenTurnRight = TURN_RELATIVE[myT.turtleDir][TURN_RIGHT]
  382.     for _, dir in ipairs(shape) do
  383.       if dir == dirWhenTurnLeft then
  384.         return TURN_LEFT
  385.       elseif dir == dirWhenTurnRight then
  386.         return TURN_RIGHT
  387.       end
  388.     end
  389.   end
  390.   local digValuableBlockOnly = function(negativeSampleSlots)
  391.     local TURN_RELATIVE = { -- turn_left, turn_right
  392.       [DIR_FORWARD] = { [TURN_LEFT] = DIR_LEFT   , [TURN_RIGHT] = DIR_RIGHT   },
  393.       [DIR_RIGHT  ] = { [TURN_LEFT] = DIR_FORWARD, [TURN_RIGHT] = DIR_BACK    },
  394.       [DIR_BACK   ] = { [TURN_LEFT] = DIR_RIGHT  , [TURN_RIGHT] = DIR_LEFT    },
  395.       [DIR_LEFT   ] = { [TURN_LEFT] = DIR_BACK   , [TURN_RIGHT] = DIR_FORWARD }}
  396.     local selSlot = 16
  397.     local checkedSlot = -1
  398.     for _, slot in ipairs(negativeSampleSlots) do
  399.       if selSlot == slot then
  400.         if turtle.compare() then
  401.           return
  402.         end
  403.         checkedSlot = slot
  404.         break
  405.       end
  406.     end
  407.     for _, slot in ipairs(negativeSampleSlots) do
  408.       if checkedSlot ~= slot then
  409.         turtle.select(slot)
  410.         if turtle.compare() then
  411.           return
  412.         end
  413.       end
  414.     end
  415.     turtle.dig()
  416.     return true
  417.   end
  418.   local myT = _myT
  419.   local shape = _shape
  420.   local negativeSampleSlots = _negativeSampleSlots
  421.   local digAny = _digAny
  422.   local firstFlg = true
  423.   local turnLR
  424.   return function()
  425.     local TURN_RELATIVE = { -- turn_left, turn_right
  426.       [DIR_FORWARD] = { [TURN_LEFT] = DIR_LEFT   , [TURN_RIGHT] = DIR_RIGHT   },
  427.       [DIR_RIGHT  ] = { [TURN_LEFT] = DIR_FORWARD, [TURN_RIGHT] = DIR_BACK    },
  428.       [DIR_BACK   ] = { [TURN_LEFT] = DIR_RIGHT  , [TURN_RIGHT] = DIR_LEFT    },
  429.       [DIR_LEFT   ] = { [TURN_LEFT] = DIR_BACK   , [TURN_RIGHT] = DIR_FORWARD }}
  430.     if firstFlg then
  431.       firstFlg = not firstFlg
  432.       if 2 == #shape or 3 == #shape then
  433.         turnToNearestEdge(myT, shape)
  434.         turnLR = getTurnFuncName(myT, shape)
  435.       else
  436.         turnLR = TURN_RIGHT
  437.       end
  438.     end
  439.     if 1 < #shape then
  440.       for i = 1, #shape do
  441.         if not SIMULATION then
  442.           if digAny then
  443.             surelyDig()
  444.           else
  445.             dug = digValuableBlockOnly(negativeSampleSlots)
  446.           end
  447.         end
  448.         if i < #shape then
  449.           myT:turnTo(TURN_RELATIVE[myT.turtleDir][turnLR])
  450.         end
  451.       end
  452.       if 2 == #shape or 3 == #shape then
  453.         if TURN_LEFT == turnLR then
  454.           turnLR = TURN_RIGHT
  455.         else
  456.           turnLR = TURN_LEFT
  457.         end
  458.       end
  459.     end
  460.   end
  461. end
  462. -- ---------------
  463. -- eject worthless
  464. -- ---------------
  465. local function dropDownUselessBlocks()
  466.   local cnt
  467.   for _, v in ipairs(SLOTS_KEEP_1) do
  468.     cnt = turtle.getItemCount(v)
  469.     if 1 < cnt then
  470.       turtle.select(v)
  471.       turtle.dropDown(cnt - 1)
  472.     end
  473.   end
  474.   for _, v in ipairs(SLOTS_KEEP_32) do
  475.     cnt = turtle.getItemCount(v)
  476.     if 32 < cnt then
  477.       turtle.select(v)
  478.       turtle.dropDown(cnt - 32)
  479.     end
  480.   end
  481.   for _, v in ipairs(SLOTS_FREE) do
  482.     cnt = turtle.getItemCount(v)
  483.     if 0 < cnt then
  484.       turtle.select(v)
  485.       for _, w in ipairs(SLOTS_USELESS_SAMPLE) do
  486.         if turtle.compareTo(w) then
  487.           turtle.dropDown()
  488.           break
  489.         end
  490.       end
  491.     end
  492.   end
  493. end
  494. -- ---------------
  495. -- drop all
  496. -- ---------------
  497. local function dropUpAll()
  498.   for _, v in ipairs(SLOTS_FREE) do
  499.     if 0 < turtle.getItemCount(v) then
  500.       turtle.select(v)
  501.       turtle.dropUp()
  502.     end
  503.   end
  504. end
  505. -- ---------------
  506. -- suck all
  507. -- ---------------
  508. local function suckUpAll()
  509.   local MSG_NO_SPACE = "No space for items"
  510.   local MSG_NO_ITEMS = "No items to take"
  511.   turtle.select(1)
  512.   while true do
  513.     local rslt, msg = turtle.suckUp()
  514.     if false == rslt then
  515.       if msg == MSG_NO_SPACE then
  516.         dropUpAll()
  517.         break
  518.       elseif msg == MSG_NO_ITEMS then
  519.         turtle.digUp()
  520.         surelyUp()
  521.         turtle.select(SLOT_TORCH)
  522.         turtle.placeUp()
  523.         surelyDown()
  524.         break
  525.       else
  526.         break
  527.       end
  528.     end
  529.   end
  530. end
  531. -- ---------------
  532. -- refuelPrompt
  533. -- ---------------
  534. function refuelPrompt(moveFunc)
  535.   local firstTime = true;
  536.   while true do
  537.     local rslt, msg;
  538.     if nil ~= moveFunc then
  539.       rslt, msg = moveFunc();
  540.     else
  541.       if firstTime then
  542.         firstTime = false;
  543.         rslt = false;
  544.         msg  = "Out of fuel";
  545.       else
  546.         return true;
  547.       end
  548.     end
  549.     if not rslt and msg == "Out of fuel" then
  550.       print("Out of fuel. please select [r]efuel or [q]uit.");
  551.       print("(r/q)");
  552.       local ch = read();
  553.       if "q" == ch then
  554.         print("Are you sure you want to stop the script?");
  555.         print("(y/n)");
  556.         ch = read();
  557.         if "y" == ch then
  558.           error("out of fuel.");
  559.         end
  560.       elseif "r" == ch then
  561.         local selSlot = 1;
  562.         while true do
  563.           print("Please type current selected slot number.");
  564.           ch = read();
  565.           local num = tonumber(ch);
  566.           if nil ~= num and 1 <= num and num <= 16 then
  567.             selSlot = num;
  568.             break;
  569.           else
  570.             print("Wrong input. Please retry.");
  571.           end
  572.         end
  573.         while true do
  574.           print("please set fuel item and type slot number.");
  575.           print("When you finish refueling, Please type q.");
  576.           print("FuelLevel = " .. turtle.getFuelLevel());
  577.           ch = read();
  578.           local num = tonumber(ch);
  579.           if nil ~= num and 1 <= num and num <= 16 then
  580.             turtle.select(num);
  581.             local fRslt, fMsg = turtle.refuel();
  582.             if not fRslt then
  583.               print(fMsg);
  584.             end
  585.           elseif "q" == ch then
  586.             turtle.select(selSlot);
  587.             break;
  588.           else
  589.             print("Wrong input. Please retry.");
  590.           end
  591.         end
  592.       end
  593.     else
  594.       return rslt, msg;
  595.     end
  596.   end
  597. end
  598.  
  599. -- -------------------------------
  600. -- main
  601. -- -------------------------------
  602. debug("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
  603. debug("@@ chunkDig5.lua")
  604. debug("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
  605. local initY = INITIAL_HEIGHT
  606. local myT = MyTurtle.new(initY)
  607. local zFirst = false
  608. for newX, newZ, shape, shapeDbg in TargetFinder.iterator(SIZE_LEFT, SIZE_FORWARD) do
  609.   debug("===============================")
  610.   debug("== newX, newZ, shapeDbg, fuelLv = " .. tostring(newX)  .. ", " .. tostring(newZ)
  611.     .. ", " .. shapeDbg .. ", " .. tostring(turtle.getFuelLevel()))
  612.   debug("===============================")
  613.   if zFirst then
  614.     myT:moveTo(newX, newZ, true)
  615.   else
  616.     myT:backTo(newX, newZ, true)
  617.   end
  618.   zFirst = not zFirst
  619.  
  620.   surelyUp()
  621.   surelyUp()
  622.   surelyUp()
  623.   turtle.select(SLOT_COBBLESTONE)
  624.   for i = 1, 4 do
  625.     surelyDig()
  626.     turtle.place()
  627.     turtle.turnLeft()
  628.   end
  629.   surelyDown()
  630.  
  631.   local miningFunc = verticalMiningAction(myT, shape, nil, true)
  632.   miningFunc()
  633.   surelyDown()
  634.   miningFunc()
  635.   surelyDown()
  636.   miningFunc()
  637.  
  638.   turtle.select(1)
  639.   surelyUp()
  640.   surelyUp()
  641.   surelyUp()
  642.   surelyDigUp()
  643.   turtle.select(SLOT_COBBLESTONE)
  644.   turtle.placeUp()
  645.   surelyDown()
  646.   surelyDown()
  647.  
  648.   while true do
  649.     if turtle.getItemCount(SLOT_CHEST) <= 2 then
  650.       print("************************")
  651.       print("** chest required!!")
  652.       print("************************")
  653.       refuelPrompt()
  654.     else
  655.       break
  656.     end
  657.   end
  658.   while true do
  659.     if turtle.getItemCount(SLOT_TORCH) <= 2 then
  660.       print("************************")
  661.       print("** torch required!!")
  662.       print("************************")
  663.       refuelPrompt()
  664.     else
  665.       break
  666.     end
  667.   end
  668.  
  669.   turtle.select(SLOT_CHEST)
  670.   turtle.placeUp()
  671.  
  672.   dropDownUselessBlocks()
  673.   dropUpAll()
  674.  
  675.   surelyDown()
  676.   turtle.select(1)
  677.  
  678.   miningFunc = verticalMiningAction(myT, shape, SLOTS_USELESS_SAMPLE, false)
  679.   for i = initY, BOTTOM_HEIGHT+1, -1 do
  680.     turtle.digDown()
  681.     turtle.down()
  682.     miningFunc()
  683.     if i == initY then
  684.       turtle.select(SLOT_COBBLESTONE)
  685.       for j = 1, 4 do
  686.         turtle.place()
  687.         turtle.turnRight()
  688.       end
  689.       turtle.select(1)
  690.     elseif i == initY - 1 then
  691.       turtle.select(SLOT_CHEST)
  692.       turtle.placeUp()
  693.       turtle.select(1)
  694.     end
  695.   end
  696.   for i = BOTTOM_HEIGHT, initY-1, 1 do
  697.     surelyUp()
  698.   end
  699.  
  700.   surelyUp()
  701.   suckUpAll()
  702.   surelyDown()
  703.  
  704.   turtle.digDown()
  705.   turtle.select(SLOT_COBBLESTONE)
  706.   turtle.placeDown()
  707.  
  708.   if turtle.getFuelLevel() <= LOW_FUEL_LEVEL then
  709.     refuelPrompt()
  710.   end
  711.   turtle.select(1)
  712. end
  713. dropDownUselessBlocks()
  714. if zFirst then
  715.   myT:moveTo(0, 0, false)
  716. else
  717.   myT:backTo(0, 0, false)
  718. end
  719. myT:turnTo(DIR_FORWARD)
  720. debug("chunkDig5 was completed.")
  721. print("chunkDig5 was completed.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement