Advertisement
UNOBTANIUM

DWC0.2

Dec 28th, 2013
385
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 20.53 KB | None | 0 0
  1. -- Dual Wood Chopper by UNOBTANIUM
  2.  
  3. -- VARIABLES
  4. local w, h = term.getSize()
  5. local posAction = "start"
  6. local posPosition = 0
  7. local errormessage = "Lastest Error: None"
  8. local persistenceResume = false
  9. local actionsPerformed = 0
  10. local actions = {"","","","","","","",""}
  11.  
  12. local wood, saplings, bonemeal, coal, resumes = 0, 0, 0, 0, 0
  13.  
  14. local useBonemeal = true
  15. local persistence = true
  16. local extendedTracking = true
  17. local height = 55
  18. local timeWaitingToGrow = 5
  19. local timeBetweenBonemealing = 1
  20. local timeBeforeNextTree = 0
  21. local redstoneTicks = 5
  22.  
  23.  
  24. -- MENU
  25.  
  26.  
  27. function menu()
  28.     local menustate = 1
  29.     local selected = 1
  30.  
  31.     while true do
  32.         local menus = {
  33.         {{"Start",2},{"Options",3},{"Statistics",130},{"Quit",0}},
  34.         {{"Chop",100},{"Go up",101},{"Build layout",102},{"Back",1}},
  35.         {{"Number Values",4},{"Boolean Values",5},{"Back",1}},
  36.         {{"Height            " .. height,110},{"Bonemeal Interval " .. timeBetweenBonemealing ,111},{"Waiting to Grow   " .. timeWaitingToGrow ,112},{"Tree Interval     " .. timeBeforeNextTree ,113},{"Redstone Ticks    " .. redstoneTicks , 114},{"Back",3}},
  37.         {{"Session Persistence " .. tostring(persistence) ,120},{"Bonemeal Usage      " .. tostring(useBonemeal) ,121},{"Extended Tracking   " .. tostring(extendedTracking), 122 },{"Back",3}}
  38.         }
  39.  
  40.         term.clear()
  41.         header("Dual Wood Chopper")
  42.         local start = 4
  43.         for i=1,table.getn(menus[menustate]) do
  44.             term.setCursorPos(8,start+i)
  45.             term.write(menus[menustate][i][1])
  46.             if selected == i then
  47.                 term.setCursorPos(4,4+i)
  48.                 term.write("C>")
  49.             end
  50.         end
  51.  
  52.         local event, key = os.pullEvent("char")
  53.         if key == "w" then
  54.             selected = selected - 1
  55.             if selected == 0 then
  56.                 selected = table.getn(menus[menustate])
  57.             end
  58.         elseif key == "s" then
  59.             selected = selected + 1
  60.             if selected > table.getn(menus[menustate]) then
  61.                 selected = 1
  62.             end
  63.         elseif key == "a" then
  64.             selected = table.getn(menus[menustate])
  65.             key = "d"
  66.         end
  67.         if key == "d" then
  68.             if menus[menustate][selected][2] == 0 then
  69.                 term.clear()
  70.                 term.setCursorPos(1,1)
  71.                 break
  72.             elseif menus[menustate][selected][2] < 100 then
  73.                 menustate = menus[menustate][selected][2]
  74.                 selected = 1
  75.             elseif menus[menustate][selected][2] == 100 then
  76.                 main()
  77.             elseif menus[menustate][selected][2] == 101 then
  78.                 goUp()
  79.             elseif menus[menustate][selected][2] == 102 then
  80.                 buildLayout()
  81.             elseif menus[menustate][selected][2] == 110 then
  82.                 height = betterRead(1+start,height)
  83.             elseif menus[menustate][selected][2] == 111 then
  84.                 timeBetweenBonemealing = betterRead(2+start,timeBetweenBonemealing)
  85.             elseif menus[menustate][selected][2] == 112 then
  86.                 timeWaitingToGrow = betterRead(3+start,timeWaitingToGrow)
  87.             elseif menus[menustate][selected][2] == 113 then
  88.                 timeBeforeNextTree = betterRead(4+start,timeBeforeNextTree)
  89.             elseif menus[menustate][selected][2] == 114 then
  90.                 redstoneTicks = betterRead(5+start,redstoneTicks)
  91.             elseif menus[menustate][selected][2] == 120 then
  92.                 persistence = not persistence
  93.             elseif menus[menustate][selected][2] == 121 then
  94.                 useBonemeal = not useBonemeal
  95.             elseif menus[menustate][selected][2] == 122 then
  96.                 extendedTracking = not extendedTracking
  97.             elseif menus[menustate][selected][2] == 130 then
  98.                 overview()
  99.             end
  100.         end
  101.         saveVariables()
  102.     end
  103.  
  104. end
  105.  
  106. function betterRead(y,text)
  107.     term.setCursorBlink(true)
  108.     local s = tostring(text)
  109.     local x = 26
  110.     local w,h = term.getSize()
  111.  
  112.     while true do
  113.         term.setCursorPos(x,y)
  114.         term.write( string.rep(' ', w - x + 1) )
  115.         term.setCursorPos(x,y)
  116.         if s:len()+x < w then
  117.             term.write(s)
  118.         else
  119.             term.write(s:sub( s:len() - (w-x-2)))
  120.         end
  121.         local e = { os.pullEvent() }
  122.         if e[1] == "timer" and e[2] == delay then
  123.             delay = os.startTimer( 2 )
  124.         elseif e[1] == "char" then
  125.             s = s .. e[2]
  126.         elseif e[1] == "key" then
  127.             if e[2] == keys.enter then
  128.                 break
  129.             elseif e[2] == keys.backspace then
  130.                 s = s:sub( 1, s:len() - 1 )
  131.             end
  132.         end
  133.     end
  134.     term.setCursorBlink(false)
  135.     s = tonumber(s)
  136.     if not s or s < 0 then
  137.         s = text
  138.     end
  139.     return s
  140. end
  141.  
  142. -- MAIN PROGRAM
  143.  
  144. function main()
  145.     while true do
  146.         drawScreen("Function: Main Start")
  147.  
  148.         getSapling(true)
  149.         placeSaplings(true)
  150.         bonemealing(true)
  151.         chopUp(true)
  152.         chopDown(true)
  153.         dropWood(true)
  154.         refuel(true)
  155.         gotoStart(true)
  156.  
  157.         perform("reset","finished",0)
  158.  
  159.         drawScreen("Function: Main End")
  160.         --need check for stop (redstone or rednet)
  161.         if redstone.getInput("left") then
  162.             return
  163.         end
  164.         sleep(timeBeforeNextTree)
  165.     end
  166. end
  167.  
  168.  
  169. function goUp()
  170.     for i=1,height do
  171.         if turtle.detectUp() then
  172.             turtle.digUp()
  173.         end
  174.         turtle.up()
  175.     end
  176.     perform("reset","chopup",(height*3)+100)
  177.     restart()
  178.     main()
  179.     perform("reset","start",0)
  180.     sleep(0)
  181. end
  182.  
  183.  
  184. function getSapling(reset)
  185.     drawScreen("Function: Get Saplings Start")
  186.     if reset then
  187.         perform("reset","getsapling",0)
  188.     elseif not (posAction == "getsapling") then
  189.         return
  190.     end
  191.     perform("back","getsapling",1)
  192.     if posPosition == 1 then
  193.         turtle.select(1)
  194.         if not turtle.dropDown() and turtle.getItemCount(1) > 0 then
  195.             turtle.drop()
  196.         end
  197.         turtle.suckDown()
  198.         drawScreen("Suck Down Saplings")
  199.         if turtle.getItemCount(1) > 5 then
  200.             turtle.dropDown(turtle.getItemCount(1)-5)
  201.             if turtle.getItemCount(1) > 5 then
  202.                 saplings = saplings + turtle.getItemCount(1)-5
  203.                 saveStats()
  204.                 errormessage = "Latest Error: Sapling Chest Is Full!"
  205.                 turtle.dropUp(turtle.getItemCount(1))
  206.             end
  207.         end
  208.         perform("reset","getsapling",2)
  209.     end
  210.     saplings = saplings + 5
  211.     saveStats()
  212.     perform("forward","getsapling",3)
  213.  
  214.     if not reset and posAction == "getsapling" then
  215.         persistenceResume = true
  216.         drawScreen("Resume...")
  217.     end
  218.  
  219.     drawScreen("Function: Get Saplings End")
  220. end
  221.  
  222. function placeSaplings(reset)
  223.     drawScreen("Function: Place Saplings Start")
  224.     if reset then
  225.         perform("reset","placesaplings",0)
  226.     elseif not (posAction == "placesaplings") then
  227.         return
  228.     end
  229.     turtle.select(1)
  230.     perform("chop","placesaplings",1)
  231.     perform("forward","placesaplings",2)
  232.     perform("chop","placesaplings",3)
  233.     perform("forward","placesaplings",4)
  234.     perform("right","placesaplings",5)
  235.     perform("place","placesaplings",6)
  236.     perform("left","placesaplings",7)
  237.     perform("back","placesaplings",8)
  238.     perform("place","placesaplings",9)
  239.     perform("right","placesaplings",10)
  240.     perform("chop","placesaplings",11)
  241.     perform("place","placesaplings",12)
  242.     perform("left","placesaplings",13)
  243.     perform("back","placesaplings",14)
  244.     perform("place","placesaplings",15)
  245.  
  246.     if not reset and posAction == "placesaplings" then
  247.         persistenceResume = true
  248.         drawScreen("Resume...")
  249.     end
  250.  
  251.     drawScreen("Function: Place Saplings End")
  252. end
  253.  
  254.  
  255. function bonemealing(reset)
  256.     drawScreen("Function: Bonemealing Start")
  257.     if reset then
  258.         perform("reset","bonemeal",0)
  259.     elseif not (posAction == "bonemeal") then
  260.         return
  261.     end
  262.     if useBonemeal and posPosition == 0 then
  263.         while true do
  264.             turtle.select(1)
  265.             if not turtle.compare() then
  266.                 if turtle.getItemCount(2) > 0 then
  267.                     turtle.select(2)
  268.                     turtle.dropDown()
  269.                     turtle.drop()
  270.                 end
  271.                 break
  272.             elseif turtle.getItemCount(2) == 0 and not turtle.suckDown() then
  273.                 if not errormessage == "Latest Error: No Bonemeal Left!!!" then
  274.                     errormessage = "Latest Error: No Bonemeal Left!!!"
  275.                     drawScreen("New Error Occured!!!")
  276.                 end
  277.                 sleep(10)
  278.             else
  279.                 turtle.select(2)
  280.                 if turtle.place() then
  281.                     bonemeal = bonemeal + 1
  282.                     saveStats()
  283.                 end
  284.                 turtle.select(1)
  285.                 if turtle.compare() then
  286.                     drawScreen("Tree didnt grew!")
  287.                     sleep(timeBetweenBonemealing)
  288.                 end
  289.             end
  290.         end
  291.     else
  292.         while true do
  293.             perform("forward","bonemeal",2)
  294.             turtle.select(1)
  295.             if not turtle.compare() then
  296.                 break
  297.             end
  298.             perform("reset","bonemeal",0)
  299.             perform("back","bonemeal",1)
  300.             sleep(timeWaitingToGrow + 0.1)
  301.         end
  302.     end
  303.  
  304.     if not reset and posAction == "bonemeal" then
  305.         persistenceResume = true
  306.         drawScreen("Resume...")
  307.     end
  308.  
  309.     drawScreen("Function: Bonemealing Start")
  310. end
  311.  
  312.  
  313.  
  314.  
  315. function chopUp(reset)
  316.     drawScreen("Function: Chop Up Start")
  317.     turtle.select(1)
  318.     if reset then
  319.         perform("reset","chopup",0)
  320.         rednet.open("right")
  321.         rednet.broadcast("DWCdigdown")
  322.         rednet.close("right")
  323.     elseif not (posAction == "chopup") then
  324.         return
  325.     end
  326.  
  327.     perform("chop","chopup",1)
  328.     perform("forward","chopup",2)
  329.     perform("chop","chopup",3)
  330.     if posPosition == 3 and redstoneTicks > 0 then
  331.         redstone.setOutput("down", true)
  332.         sleep(math.floor(redstoneTicks)/10)
  333.         redstone.setOutput("down", false)
  334.     end
  335.     for i=0,height-1,1 do
  336.         perform("chopUp","chopup",4+i*3)
  337.         perform("up","chopup",5+i*3)
  338.         perform("chop","chopup",6+i*3)
  339.     end
  340.     perform("back","chopup",(height-1)*3+7)
  341.  
  342.     if not reset and posAction == "chopup" then
  343.         persistenceResume = true
  344.         drawScreen("Resume...")
  345.     end
  346.  
  347.     drawScreen("Function: Chop Up End")
  348. end
  349.  
  350.  
  351.  
  352. function chopDown(reset)
  353.     drawScreen("Function: Chop Down Start")
  354.     turtle.select(1)
  355.     if reset then
  356.         rednet.open("right")
  357.         while true do
  358.             local event, id, message, distance = os.pullEvent("rednet_message")
  359.             if type(message) == "string" and message == "DWCdigdown" and distance == height then
  360.                 break
  361.             end
  362.             drawScreen(event .. " " .. message .. " " .. distance)
  363.         end
  364.         rednet.close("right")
  365.         perform("reset","chopdown",0)
  366.     elseif not (posAction == "chopdown") then
  367.         return
  368.     end
  369.  
  370.     perform("right","chopdown",1)
  371.     perform("chop","chopdown",2)
  372.     perform("forward","chopdown",3)
  373.     perform("left","chopdown",4)
  374.     perform("chop","chopdown",5)
  375.     perform("forward","chopdown",6)
  376.     perform("chop","chopdown",7)
  377.     for i=0,height-1,1 do
  378.         perform("chopDown","chopdown",8+i*3)
  379.         perform("down","chopdown",9+i*3)
  380.         perform("chop","chopdown",10+i*3)
  381.     end
  382.     perform("back","chopdown",(height-1)*3+11)
  383.  
  384.     if not reset and posAction == "chopdown" then
  385.         persistenceResume = true
  386.         drawScreen("Resume...")
  387.     end
  388.  
  389.     drawScreen("Function: Chop Down End")
  390. end
  391.  
  392.  
  393. function dropWood(reset)
  394.     drawScreen("Function: Drop Wood Start")
  395.     if reset then
  396.         perform("reset","dropwood",0)
  397.     elseif not (posAction == "dropwood") then
  398.         return
  399.     end
  400.     for i=2,16 do
  401.         if turtle.getItemCount(i) > 0 then
  402.             wood = wood + turtle.getItemCount(i)
  403.             saveStats()
  404.             turtle.select(i)
  405.             if i == 2 and turtle.getFuelLevel() < height*3 then
  406.                 perform("dropDown","dropwood",i-1,turtle.getItemCount(i)-32)
  407.             else
  408.                 perform("dropDown","dropwood",i-1,64)
  409.             end
  410.         else
  411.             perform("reset","dropwood",i-1)
  412.         end
  413.     end
  414.  
  415.     if not reset and posAction == "dropwood" then
  416.         persistenceResume = true
  417.         drawScreen("Resume...")
  418.     end
  419.  
  420.     drawScreen("Function: Drop Wood End")
  421. end
  422.  
  423.  
  424. function refuel(reset)
  425.     drawScreen("Function: Refuel Start")
  426.     if reset then
  427.         if turtle.getFuelLevel() >= height*3 then
  428.             return
  429.         end
  430.         perform("reset","refuel",0)
  431.     elseif not (posAction == "refuel") then
  432.         return
  433.     end
  434.     perform("back","refuel",1)
  435.     perform("back","refuel",2)
  436.     turtle.select(2)
  437.     perform("dropDown","refuel",3,32)
  438.     perform("forward","refuel",4)
  439.     perform("down","refuel",5)
  440.     perform("turn","refuel",6)
  441.     local tryAgain = true
  442.     while tryAgain do
  443.         perform("suck","refuel",7)
  444.         coal = coal + turtle.getItemCount(2)
  445.         saveStats()
  446.         perform("down","refuel",8)
  447.         perform("forward","refuel",9)
  448.         if posPosition == 9 then
  449.             if turtle.getFuelLevel() + (turtle.getItemCount(2)-8)*80 >= height*7 then
  450.                 perform("dropUp","refuel",10,8)
  451.                 tryAgain = false
  452.             elseif turtle.getFuelLevel() + (turtle.getItemCount(2)-3)*80 >= height*7 then
  453.                 perform("dropUp","refuel",10,3)
  454.                 tryAgain = false
  455.             else
  456.                 turtle.suckUp()
  457.                 if turtle.getItemCount(3) > 0 then
  458.                     turtle.select(3)
  459.                     turtle.refuel()
  460.                     turtle.select(2)
  461.                 end
  462.                 for i=turtle.getItemCount(2),2,-1 do
  463.                     if i <= 2 then
  464.                         perform("dropUp","refuel",10,turtle.getItemCount(2))
  465.                         drawScreen("Not enought coal to keep going. Waiting...")
  466.                         sleep(16)
  467.                         perform("refuel","refuel",11)
  468.                         perform("back","refuel",12)
  469.                         perform("up","refuel",13)
  470.                         perform("reset","refuel",6)
  471.                     elseif turtle.getFuelLevel() + (turtle.getItemCount(2)-i)*80 >= height*7 then
  472.                         perform("dropUp","refuel",10,i)
  473.                         tryAgain = false
  474.                         break
  475.                     end
  476.                 end
  477.             end
  478.         end
  479.     end
  480.     drawScreen("refueled: " .. turtle.getItemCount(2))
  481.     perform("refuel","refuel",11)
  482.     perform("back","refuel",12)
  483.     perform("up","refuel",13)
  484.     perform("turn","refuel",14)
  485.     perform("up","refuel",15)
  486.     perform("forward","refuel",16)
  487.  
  488.     if not reset and posAction == "refuel" then
  489.         persistenceResume = true
  490.         drawScreen("Resume...")
  491.     end
  492.  
  493.     drawScreen("Function: Refuel End")
  494. end
  495.  
  496. function gotoStart(reset)
  497.     drawScreen("Function: Goto Start Start")
  498.     if reset then
  499.         perform("reset","gotostart",0)
  500.     elseif not (posAction == "gotostart") then
  501.         return
  502.     end
  503.  
  504.     perform("left","gotostart",1)
  505.     perform("forward","gotostart",2)
  506.     perform("right","gotostart",3)
  507.  
  508.     drawScreen("Function: Goto Start End")
  509. end
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517. -- RESUME / SESSION PERSISTENCE
  518.  
  519. function restart()
  520.     persistenceResume = false
  521.     getSapling(persistenceResume)
  522.     placeSaplings(persistenceResume)
  523.     bonemealing(persistenceResume)
  524.     chopUp(persistenceResume)
  525.     chopDown(persistenceResume)
  526.     dropWood(persistenceResume)
  527.     refuel(persistenceResume)
  528.     gotoStart(persistenceResume)
  529. end
  530.  
  531.  
  532.  
  533.  
  534.  
  535. -- BUILDING
  536.  
  537. function buildLayout()
  538.     term.clear()
  539.     centered("This program builds the layout.", 9)
  540.     centered("You can cancel with Ctrg + T", 10)
  541.     checkItemSlot(1,"or more charcoal", 12)
  542.     checkItemSlot(2,"chest for wood storage",1)
  543.     checkItemSlot(3,"chest for bonemeal storage",1)
  544.     checkItemSlot(4,"chest for sapling storage",1)
  545.     checkItemSlot(5,"furnace",1)
  546.     checkItemSlot(6,"lever",1)
  547.     checkItemSlot(7,"or more saplings",1)
  548.     checkItemSlot(8,"or more bonemeal",1)
  549.     checkItemSlot(9,"dirt blocks",4)
  550.     while turtle.getFuelLevel() < 50 do
  551.         checkItemSlot(10," fuel (e.g. charcoal)", 1)
  552.         turtle.refuel()
  553.     end
  554.  
  555.     centered("Start the building process?", 5)
  556.     centered("Y / N", 7)
  557.     while true do
  558.         local event, key = os.pullEvent("char")
  559.         if key == "n" then return
  560.         elseif key == "y" then break end
  561.         sleep(0)
  562.     end
  563.     term.clear()
  564.     centered("Take a step back please!!!", 6)
  565.     sleep(5)
  566.     centered("Building...", 7)
  567.     turtle.select(10)
  568.     turtle.digDown()
  569.     turtle.select(3) -- bonemeal chest
  570.     turtle.placeDown()
  571.     turtle.select(8) -- bonemeal indicator
  572.     turtle.dropDown()
  573.     for i = 1, 5 do
  574.         if i == 3  or i == 4 then
  575.             turtle.turnRight()
  576.         end
  577.         turtle.forward()
  578.         turtle.select(10)
  579.         turtle.digDown()
  580.         if i<= 4 then
  581.             turtle.select(9) -- dirt block
  582.         else
  583.             turtle.select(2) -- wood chest
  584.         end
  585.         turtle.placeDown()
  586.     end
  587.     turtle.forward()
  588.     turtle.select(10)
  589.     for i = 1,2 do
  590.         turtle.digDown()
  591.         turtle.down()
  592.         turtle.dig()
  593.     end
  594.     turtle.forward()
  595.     turtle.select(5) -- furnace
  596.     turtle.placeUp()
  597.     turtle.select(1) -- charcoal for the furnace
  598.     turtle.dropUp()
  599.     turtle.back()
  600.     for i = 1, 2 do turtle.up() end
  601.     turtle.turnRight()
  602.     turtle.forward()
  603.     turtle.turnRight()
  604.     turtle.select(10)
  605.     turtle.digDown()
  606.     turtle.select(4) -- sapling chest
  607.     turtle.placeDown()
  608.     turtle.select(7) -- sapling indicator
  609.     turtle.dropDown()
  610.     turtle.forward()
  611.     turtle.turnLeft()
  612.     turtle.select(6) -- lever
  613.     turtle.place()
  614.     turtle.select(10)
  615.     turtle.drop()
  616.     turtle.turnRight()
  617. end
  618.  
  619.  
  620. function checkItemSlot(slot, item, amount)
  621.     header("Building layout")
  622.     if turtle.getFuelLevel() < 50 then
  623.         centered(slot .. " / 10", 4)
  624.     else
  625.         centered(slot .. " / 9", 4)
  626.     end
  627.     centered("Put " .. amount .. " " .. item,5)
  628.     centered("into the selected slot!",6)
  629.     turtle.select(slot)
  630.     while turtle.getItemCount(slot) < amount do
  631.         sleep(0.5)
  632.     end
  633.     term.clear()
  634. end
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641. -- PERFORM ACTION + SESSION PERSISTENCE
  642.  
  643. function perform(action, pos, num, amount)
  644.     amount = amount or 64
  645.     if action == "reset" then
  646.         if extendedTracking then
  647.             drawScreen("" .. action .. " " .. pos .. num)
  648.         end
  649.         posAction = pos
  650.         posPosition = num
  651.     elseif (pos == posAction and num-1 == posPosition) then
  652.         if extendedTracking then
  653.             drawScreen("" .. action .. " " .. pos .. num)
  654.         end
  655.         posAction = pos
  656.         posPosition = num
  657.         actionsPerformed = actionsPerformed + 1
  658.         local file = fs.open("DWCpos","w")
  659.             file.writeLine(pos)
  660.             file.writeLine(num)
  661.         file.close()
  662.         if action == "up" then
  663.             turtle.up()
  664.         elseif action == "chop" then
  665.             turtle.dig()
  666.         elseif action == "chopDown" then
  667.             turtle.digDown()
  668.         elseif action == "chopUp" then
  669.             turtle.digUp()
  670.         elseif action == "down" then
  671.             turtle.down()
  672.         elseif action == "forward" then
  673.             turtle.forward()
  674.         elseif action == "back" then
  675.             turtle.back()
  676.         elseif action == "place" then
  677.             turtle.place()
  678.         elseif action == "right" then
  679.             turtle.turnRight()
  680.         elseif action == "left" then
  681.             turtle.turnLeft()
  682.         elseif action == "turn" then
  683.             if math.random() < 0.5 then
  684.                 turtle.turnLeft()
  685.                 turtle.turnLeft()
  686.             else
  687.                 turtle.turnRight()
  688.                 turtle.turnRight()
  689.             end
  690.  
  691.             --?????
  692.         elseif action == "drop" then
  693.             turtle.drop(amount)
  694.         elseif action == "dropDown" then
  695.             turtle.dropDown(amount)
  696.         elseif action == "dropUp" then
  697.             turtle.dropUp(amount)
  698.         elseif action == "suck" then
  699.             turtle.suck()
  700.         elseif action == "suckDown" then
  701.             turtle.suckDown()
  702.         elseif action == "suckUp" then
  703.             turtle.suckUp()
  704.         elseif action == "refuel" then
  705.             turtle.refuel()
  706.         end
  707.     end
  708. end
  709.  
  710. function checkState(pos, num, diff)
  711.     diff = diff or 0
  712.     return ((pos == posAction) and (num == posPosition+diff))
  713. end
  714.  
  715. -- ON SCREEN
  716.  
  717. function drawScreen(text)
  718.     term.clear()
  719.     for i=1,7 do
  720.         actions[i] = actions[i+1]
  721.         term.setCursorPos(1,i+1)
  722.         term.write(actions[i])
  723.     end
  724.     actions[8] = text
  725.     term.setCursorPos(1, 8)
  726.     term.write(actions[7])
  727.     term.setCursorPos(1,10)
  728.     term.write("------------------------------")
  729.     term.setCursorPos(1, 11)
  730.     term.write(errormessage)
  731.     --[[
  732.     term.setCursorPos(1,12)
  733.     term.write("Wood: " .. wood .. " | Coal: " .. coal)
  734.     term.setCursorPos(1,13)
  735.     term.write("Saplings: " .. saplings .. " | Bonemeal: " .. bonemeal)
  736.     ]]--
  737.  
  738. end
  739.  
  740.  
  741. function overview()
  742.     term.clear()
  743.     header("Statistics")
  744.     term.setCursorPos(8, 5)
  745.     term.write("Wood: " .. wood)
  746.     term.setCursorPos(4, 6)
  747.     term.write("Saplings: " .. saplings)
  748.     term.setCursorPos(4, 7)
  749.     term.write("Bonemeal: " .. bonemeal)
  750.     term.setCursorPos(8, 8)
  751.     term.write("Coal: " .. coal)
  752.     term.setCursorPos(5, 10)
  753.     term.write("Resumes: " .. resumes)
  754.     term.setCursorPos(5, 11)
  755.     term.write("Actions: " .. actionsPerformed)
  756.     os.pullEvent("char")
  757.     sleep(0.1)
  758. end
  759.  
  760. function centered(text, ypos)
  761.     term.setCursorPos(w/2 - #text/2, ypos)
  762.     term.write(text)
  763. end
  764.  
  765. function header(str, ypos)
  766.     ypos = ypos or 1
  767.     centered(str, ypos)
  768.     centered(string.rep("-", w), ypos+1)
  769. end
  770.  
  771. -- SAVE AND LOAD
  772.  
  773. function saveVariables()
  774.     local file = fs.open("DWCvars","w")
  775.         file.writeLine(tostring(useBonemeal))
  776.         file.writeLine(tostring(persistence))
  777.         file.writeLine(tostring(extendedTracking))
  778.         file.writeLine(height)
  779.         file.writeLine(timeWaitingToGrow)
  780.         file.writeLine(timeBetweenBonemealing)
  781.         file.writeLine(timeBeforeNextTree)
  782.         file.writeLine(redstoneTicks)
  783.     file.close()
  784. end
  785.  
  786. function saveStats()
  787.     local file = fs.open("DWCstats","w")
  788.         file.writeLine(wood)
  789.         file.writeLine(saplings)
  790.         file.writeLine(bonemeal)
  791.         file.writeLine(coal)
  792.         file.writeLine(actionsPerformed)
  793.         file.writeLine(resumes)
  794.     file.close()
  795. end
  796.  
  797. function load()
  798.     if fs.exists("DWCvars") then
  799.         local file = fs.open("DWCvars","r")
  800.             if file.readLine() == "false" then
  801.                 useBonemeal = false
  802.             end
  803.             if file.readLine() == "false" then
  804.                 persistence = false
  805.             end
  806.             if file.readLine() == "false" then
  807.                 extendedTracking = false
  808.             end
  809.             height = tonumber(file.readLine())
  810.             timeWaitingToGrow = tonumber(file.readLine())
  811.             timeBetweenBonemealing = tonumber(file.readLine())
  812.             timeBeforeNextTree = tonumber(file.readLine())
  813.             redstoneTicks = tonumber(file.readLine())
  814.         file.close()
  815.     end
  816.  
  817.     if fs.exists("DWCstats") then
  818.         local file2 = fs.open("DWCstats","r")
  819.             wood = tonumber(file2.readLine())
  820.             saplings = tonumber(file2.readLine())
  821.             bonemeal = tonumber(file2.readLine())
  822.             coal = tonumber(file2.readLine())
  823.             actionsPerformed = tonumber(file2.readLine())
  824.             resumes = tonumber(file2.readLine())
  825.         file2.close()
  826.     end
  827. end
  828.  
  829.  
  830. -- CHECK FOR SESSION PERSISTENCE AND MAIN
  831.  
  832. term.clear()
  833. term.setCursorPos(1, 1)
  834. drawScreen("Dual Wood Chopper initiated!!!")
  835. load()
  836. if persistence and fs.exists("DWCpos") then
  837.     local file = fs.open("DWCpos","r")
  838.         posAction = file.readLine()
  839.         posPosition = tonumber(file.readLine())
  840.     file.close()
  841.     drawScreen("Restart at " .. posAction .. posPosition)
  842.     restart()
  843.     main()
  844. end
  845.  
  846. menu()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement