martijnenco

API

Sep 7th, 2014
797
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.33 KB | None | 0 0
  1. -- Turtle API(Self-tracking System&Navigation) created by Latias1290 and edited by martijnenco.
  2.  
  3. local xPos, yPos, zPos = nil
  4. cal = false
  5.  
  6. function saveMetaData( ... ) --[1] = event, [2] = true or false, [3] = howfar it was on it.
  7.     MetaData.MetaData.coords.x = xPos
  8.     MetaData.MetaData.coords.y = yPos
  9.     MetaData.MetaData.coords.z = zPos
  10.     MetaData.MetaData.coords.orientation = face
  11.     if arg[1] ~= nil and arg[2] ~= nil and arg[3] ~= nil then
  12.         MetaData.MetaData.lastKnown.event = arg[1]
  13.         MetaData.MetaData.lastKnown.bool = arg[2]
  14.         MetaData.MetaData.lastKnown.howfar = arg[3]
  15.     end
  16.     local file = fs.open("MetaData",'w')
  17.     file.write("MetaData = ")
  18.     file.write(textutils.serialize(MetaData.MetaData))
  19.     file.close()
  20. end
  21.  
  22. function setLocation(t)
  23.     local x,y,z = gps.locate(t)
  24.     if x ~= nil then
  25.         xPos, yPos, zPos = x,y,z
  26.         cal = true
  27.         return true
  28.     else
  29.         return false
  30.     end
  31. end
  32.  
  33. function getLocation()
  34.     if xPos ~= nil then
  35.         return xPos, yPos, zPos
  36.     elseif xPos == nil then
  37.         return nil
  38.     end
  39. end
  40.  
  41. function turnRight()
  42.     turtle.turnRight()
  43.     if face == 0 then
  44.         face = 1
  45.     elseif face == 1 then
  46.         face = 2
  47.     elseif face == 2 then
  48.         face = 3
  49.     elseif face == 3 then
  50.         face = 0
  51.     end
  52.     saveMetaData()
  53.     return true
  54. end
  55.  
  56. function turnLeft()
  57.     turtle.turnLeft()
  58.     if face == 0 then
  59.         face = 3
  60.     elseif face == 1 then
  61.         face = 0
  62.     elseif face == 2 then
  63.         face = 1
  64.     elseif face == 3 then
  65.         face = 2
  66.     end
  67.     saveMetaData()
  68.     return true
  69. end
  70.  
  71. function forward()
  72.     if cal == true then
  73.         if turtle.forward() then
  74.             if face == 0 then
  75.                 zPos = zPos + 1
  76.             elseif face == 1 then
  77.                 xPos = xPos - 1
  78.             elseif face == 2 then
  79.                 zPos = zPos - 1
  80.             elseif face == 3 then
  81.                 xPos = xPos + 1
  82.             end
  83.             saveMetaData()
  84.             return true
  85.         else
  86.             return false
  87.         end
  88.     else
  89.         print("Not Calibrated.")
  90.         return false
  91.     end
  92. end
  93.  
  94. function back()
  95.     if cal == true then
  96.         if turtle.back() then
  97.             if face == 0 then
  98.                 zPos = zPos - 1
  99.             elseif face == 1 then
  100.                 xPos = xPos + 1
  101.             elseif face == 2 then
  102.                 zPos = zPos + 1
  103.             elseif face == 3 then
  104.                 xPos = xPos - 1
  105.             end
  106.             saveMetaData()
  107.             return true
  108.         else
  109.             return false
  110.         end
  111.     else
  112.         print("Not Calibrated.")
  113.         return false
  114.     end
  115. end
  116.  
  117. function up()
  118.  if cal == true then
  119.     if turtle.up() then
  120.         yPos = yPos + 1
  121.         saveMetaData()
  122.         return true
  123.     else
  124.         print("Obstructed")
  125.         return false
  126.     end
  127.  else print("Not Calibrated") return false end
  128. end
  129.  
  130. function down()
  131.  if cal == true then
  132.     if turtle.down() then
  133.         yPos = yPos - 1
  134.         saveMetaData()
  135.         return true
  136.     else
  137.         print("Obstructed")
  138.         return false
  139.     end
  140.  else print("Not Calibrated") return false end
  141. end
  142.  
  143. function compass()
  144.     i = nil
  145.     turtle.up()
  146.     setLocation(2)
  147.     local x1, y1, z1 = getLocation()
  148.     while turtle.forward() == false do turtle.dig() turtle.attack() os.sleep(0.5) end
  149.     setLocation(2)
  150.     local x2, y2, z2 = getLocation()
  151.     if x1 == nil or y1 == nil or z1 == nil or x2 == nil or y2 == nil or z2 == nil then print("No Gps..") i = false
  152.     elseif x1 - x2 == 0 and z1 - z2 == 0 then
  153.     elseif x1 - x2 < 0 then face = 3 i = true w = 'east'
  154.     elseif x1 - x2 > 0 then face = 1 i = true w = 'west'
  155.     elseif z1 - z2 < 0 then face = 0 i = true w = 'south'
  156.     elseif z1 - z2 > 0 then face = 2 i = true w = 'north'
  157.     end
  158.     while turtle.back() == false do os.sleep(0.5) end
  159.     x1, x2, y1, y2, z1, z2 = nil
  160.     turtle.down()
  161.     setLocation(2)
  162.     if i == false then
  163.         return false
  164.     else
  165.         return face, w
  166.     end
  167. end
  168.  
  169. function refuel()
  170.     turtle.select(1)
  171.     if turtle.getFuelLevel() <= 500 then
  172.         if turtle.getItemCount(1) <= 15 then
  173.             if turtle.getItemCount(1) <= 1 then
  174.                 return false
  175.             else
  176.                 print("(Nearly) out of fuel/coal..")
  177.                 turtle.refuel(turtle.getItemCount(1) - 1)
  178.                 return true
  179.             end
  180.         else
  181.             turtle.refuel(10)
  182.             return true
  183.         end
  184.     else return true
  185.     end
  186. end
  187.  
  188. function decrypt(x)
  189.     teller = 0
  190.     vard = {}
  191.     for i in string.gmatch(tostring(x.message),"[^.]+") do
  192.         if teller == 0 then
  193.             idd = tonumber(i)
  194.         elseif teller == 1 then
  195.             eventd = tostring(i)
  196.         else
  197.             vard[teller] = tostring(i)
  198.         end
  199.         teller = teller + 1
  200.     end
  201.     return idd, eventd, vard[2], vard[3], vard[4], vard[5], vard[6]
  202. end
  203.  
  204. function pullEvent_Modem_Message()
  205.     bevent, bvar1, bvar2, bvar3, bvar4, bvar5 = os.pullEvent('modem_message')
  206. end
  207. function pullEvent_Keys()
  208.     bevent, bvar1 = os.pullEvent('key')
  209. end
  210. function pullEvent_Time_Out()
  211.     os.sleep(0.05)
  212.     bTimer = os.startTimer(0.05)
  213.     bevent, bvar1 = os.pullEvent("timer")
  214. end
  215. function pullEvent2()
  216.     parallel.waitForAny(pullEvent_Modem_Message, pullEvent_Keys)
  217.     return bevent, bvar1, bvar2, bvar3, bvar4, bvar5
  218. end
  219.  
  220. function turn(side)
  221.     while face ~= side do
  222.         turnLeft()
  223.     end
  224. end
  225.  
  226. local function move(fud, care)
  227.     if fud == 'forward' then
  228.         if forward() then
  229.         else
  230.             if turtle.attack() then
  231.             else
  232.                 a, b = turtle.inspect()
  233.                 if b.name == "ComputerCraft:CC-Turtle" then
  234.                     print("blocked by a turtle...")
  235.                     os.sleep(2)
  236.                 else
  237.                     if turtle.dig() then else refuel() end
  238.                 end
  239.             end
  240.         end
  241.     elseif fud == 'down' then
  242.         if down() then
  243.         else
  244.             if turtle.attackDown() then
  245.             else
  246.                 a, b = turtle.inspectDown()
  247.                 if b.name == "ComputerCraft:CC-Turtle" then
  248.                     print("blocked by a turtle...")
  249.                     os.sleep(2)
  250.                 else
  251.                     if turtle.dig() then else refuel() end
  252.                 end
  253.             end
  254.         end
  255.     elseif fud == 'up' then
  256.         if up() then
  257.             else
  258.                 a, b = turtle.inspectUp()
  259.                 if b.name == "ComputerCraft:CC-Turtle" then
  260.                     print("blocked by a turtle...")
  261.                     os.sleep(2)
  262.                 else
  263.                     if turtle.dig() then else refuel() end
  264.                 end
  265.             end
  266.     end
  267. end
  268.  
  269. function toLocation(x, y, z, height, care)
  270.     if y <= 0 then print("Unvalid Y coordinate") return false end
  271.     print('To:   '..x..' '..y..' '..z..' @Height: '..height)
  272.     print('From: '..xPos..' '..yPos..' '..zPos)
  273.    
  274.     if (height - yPos) > 0 then -- go up
  275.         while yPos ~= height do
  276.             move('up', care)
  277.         end
  278.     elseif (height - yPos) < 0 then
  279.         while yPos ~= height do
  280.             move('down', care)
  281.         end
  282.     end
  283.    
  284.     if height == 100 then
  285.         if (x - xPos) < 0 then
  286.             turn(1)
  287.             while x - xPos ~= 0 do
  288.                 move('forward', care)
  289.             end
  290.         elseif (x - xPos) > 0 then
  291.             turn(3)
  292.             while x - xPos ~= 0 do
  293.                 move('forward', care)
  294.             end
  295.         end
  296.         if (z - zPos) < 0 then
  297.             turn(2)
  298.             while z - zPos ~= 0 do
  299.                 move('forward', care)
  300.             end
  301.         elseif (z - zPos) > 0 then
  302.             turn(0)
  303.             while z - zPos ~= 0 do
  304.                 move('forward', care)
  305.             end
  306.         end
  307.        
  308.     else
  309.         if (z - zPos) < 0 then
  310.             turn(2)
  311.             while z - zPos ~= 0 do
  312.                 move('forward', care)
  313.             end
  314.         elseif (z - zPos) > 0 then
  315.             turn(0)
  316.             while z - zPos ~= 0 do
  317.                 move('forward', care)
  318.             end
  319.         end
  320.         if (x - xPos) < 0 then
  321.             turn(1)
  322.             while x - xPos ~= 0 do
  323.                 move('forward', care)
  324.             end
  325.         elseif (x - xPos) > 0 then
  326.             turn(3)
  327.             while x - xPos ~= 0 do
  328.                 move('forward', care)
  329.             end
  330.         end
  331.     end
  332.    
  333.     if (y - yPos) > 0 then --go down again
  334.         while yPos ~= y do
  335.             move('up', care)
  336.         end
  337.     elseif (y - yPos) < 0 then
  338.         while yPos ~= y do
  339.             move('down', care)
  340.         end
  341.     end
  342. end
  343.  
  344. if fs.exists("MetaData") then else
  345.     local file = fs.open("MetaData", "w")
  346.     file.write("MetaData = {coords = {x = 0, y = 0, z = 0, orientation = 0,}, lastKnown = {event = '', bool = false, howfar = 0,}}")
  347.     file.close()
  348. end
  349. if setLocation(2) then if compass() then end end
  350. os.loadAPI("MetaData")
Advertisement
Add Comment
Please, Sign In to add comment