CoolisTheName007

ubolt

Mar 8th, 2013
593
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.63 KB | None | 0 0
  1.  
  2. local main_api=[[
  3. --from quarry program
  4. local function moveTurtle(moveFn, detectFn, digFn, attackFn, maxDigCount)
  5.   -- Flag to determine whether digging has been tried yet. If it has
  6.   -- then pause briefly before digging again to allow sand or gravel to
  7.   -- drop
  8.   local digCount = 0
  9.   local moveSuccess = moveFn()
  10.  
  11.   while ((moveSuccess == false) and (digCount < maxDigCount)) do
  12.  
  13.         -- If there is a block in front, dig it
  14.         if (detectFn() == true) then
  15.          
  16.                 -- If we've already tried digging, then pause before digging again to let
  17.                 -- any sand or gravel drop
  18.                 if(digCount > 0) then
  19.                   sleep(0.4)
  20.                 end
  21.  
  22.                 digFn()
  23.                 digCount = digCount + 1
  24.         else
  25.            -- Am being stopped from moving by a mob, attack it
  26.            attackFn()
  27.         end
  28.  
  29.         -- Try the move again
  30.         moveSuccess = moveFn()
  31.   end
  32.  
  33.   -- Return the move success
  34.   return moveSuccess
  35.  
  36. end
  37.  
  38. local function has()
  39.     return fs.exists'temp_ubolt'
  40. end
  41.  
  42. local function save(n)
  43.     f=fs.open('temp_ubolt','w')
  44.     f.write(tostring(n))
  45.     f.close()
  46. end
  47. local function get()
  48.     f=fs.open('temp_ubolt','r')
  49.     local n=tonumber(f.readLine())
  50.     f.close()
  51.     return n
  52. end
  53.  
  54. local old_up,old_down,old_pull_event
  55. local function erase()
  56.     fs.delete'temp_ubolt'
  57.     fs.delete'startup'
  58.     turtle.up=old_up
  59.     turtle.down=old_down
  60.     os.pullEvent=old_pull_event
  61. end
  62.  
  63. old_up=turtle.up
  64. turtle.up=function(...)
  65.     local r=old_up(...)
  66.     save(get()+(r and 1 or 0))
  67.     --print(get())
  68.     return r
  69. end
  70. old_down=turtle.down
  71. turtle.down=function(...)
  72.     local r=old_down(...)
  73.     save(get()+(r and -1 or 0))
  74.     --print(get())
  75.     return r
  76. end
  77. old_pull_event=os.pullEvent
  78. os.pullEvent=function(_sFilter)
  79.     local eventData = {os.pullEventRaw( _sFilter )}
  80.     if eventData[1] == "terminate" then
  81.         erase()
  82.         --print(get())
  83.         printError( "Terminated" )
  84.         error()
  85.     end
  86.     return unpack(eventData)
  87. end
  88.  
  89. if not has() then save(0) end
  90.  
  91. ]]
  92.  
  93.  
  94. local args={...}
  95. if #args>0 then
  96.     if args[1]=='reset' then
  97.         main_api=main_api..[[
  98.        
  99.         erase()
  100.        
  101.         ]]
  102.         setfenv(loadstring(main_api),getfenv())()
  103.     else
  104.         print([[
  105.         Usage: ubolt reset
  106.         ]])
  107.     end
  108.     return
  109. end
  110. setfenv(loadstring(main_api),getfenv())()
  111.  
  112. local s=fs.open('startup','w')
  113. s.write(main_api..[[
  114.     if has() then
  115.         repeat
  116.             if get()<0 then
  117.                 moveTurtle(turtle.up, turtle.detectUp, turtle.digUp, turtle.attackUp, math.huge)
  118.             elseif get()>0 then
  119.                 moveTurtle(turtle.down, turtle.detectDown, turtle.digDown, turtle.attackDown, math.huge)
  120.             end
  121.         until get()==0
  122.     end
  123.     erase()
  124. ]])
  125. s.close()
Advertisement
Add Comment
Please, Sign In to add comment