Advertisement
Alakazard12

Turtle Server

Nov 16th, 2012
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.04 KB | None | 0 0
  1. turtle = 13
  2. co = {0, 0, 0}
  3. sty = co[2] - 20
  4. direction = 1
  5. selected = 1
  6. last = 1
  7. tm = 1
  8. start = {0, 0, 0}
  9. returning = false
  10.  
  11. function save()
  12.     local fp = fs.open("/save", "w")
  13.     fp.write(textutils.serialize(co))
  14.     fp.close()
  15.     local fp2 = fs.open("/direction", "w")
  16.     fp2.write(textutils.serialize({direction}))
  17.     fp2.close()
  18.     print("Saved coordinates: ("..co[1]..", "..co[2]..", "..co[3]..")")
  19. end
  20.  
  21. function sep(list, by)
  22.     local newlist = {}
  23.     while true do
  24.         local on = nil
  25.         local done = false
  26.         for i = 1, #list do
  27.             if done == false then
  28.                 if string.sub(list, i, i) == by then
  29.                     on = i
  30.                     done = true
  31.                 end
  32.             end
  33.         end
  34.         if on then
  35.             table.insert(newlist, string.sub(list, 1, on - 1))
  36.             list = string.sub(list, on + 1)
  37.         else
  38.             break
  39.         end
  40.     end
  41.     table.insert(newlist, list)
  42.     return newlist
  43. end
  44.  
  45. function clear()
  46.     term.clear()
  47.     term.setCursorPos(1, 1)
  48.     term.setTextColor(1)
  49. end
  50.  
  51. function ports()
  52.     rednet.open("back")
  53.     rednet.open("top")
  54.     rednet.open("front")
  55.     rednet.open("bottom")
  56.     rednet.open("left")
  57.     rednet.open("right")
  58. end
  59.  
  60. function rec()
  61.     local idr, msgr, elr = nil
  62.     function lop()
  63.         local id, msg = rednet.receive()
  64.         if id == turtle then
  65.             msg = textutils.unserialize(msg)
  66.             idr = id
  67.             msgr = msg
  68.         else
  69.             lop()
  70.         end
  71.     end
  72.     lop()
  73.     repeat sleep(0) until idr and msgr
  74.     return idr, msgr
  75. end
  76.  
  77. function down()
  78.     rednet.send(turtle, textutils.serialize({"down"}))
  79.     local id, ms = rec()
  80.     if ms[1] == true then
  81.         co[2] = co[2] - 1
  82.     end
  83.     return ms
  84. end
  85.  
  86. function up()
  87.     rednet.send(turtle, textutils.serialize({"up"}))
  88.     local id, ms = rec()
  89.     if ms[1] == true then
  90.         co[2] = co[2] + 1
  91.     end
  92.     return ms
  93. end
  94.  
  95. function back()
  96.     rednet.send(turtle, textutils.serialize({"back"}))
  97.     local id, ms = rec()
  98.     if ms[1] == true then
  99.         if direction == 1 then
  100.             co[1] = co[1] - 1
  101.         elseif direction == 2 then
  102.             co[3] = co[3] + 1
  103.         elseif direction == 3 then
  104.             co[1] = co[1] + 1
  105.         elseif direction == 4 then
  106.             co[3] = co[3] - 1
  107.         end
  108.     end
  109.     return ms
  110. end
  111.  
  112. function forward()
  113.     rednet.send(turtle, textutils.serialize({"forward"}))
  114.     local id, ms = rec()
  115.     if ms[1] == true then
  116.         if direction == 1 then
  117.             co[1] = co[1] + 1
  118.         elseif direction == 2 then
  119.             co[3] = co[3] - 1
  120.         elseif direction == 3 then
  121.             co[1] = co[1] - 1
  122.         elseif direction == 4 then
  123.             co[3] = co[3] + 1
  124.         end
  125.     end
  126.     return ms
  127. end
  128.  
  129. function left()
  130.     rednet.send(turtle, textutils.serialize({"turnLeft"}))
  131.     local id, ms = rec()
  132.     if ms[1] == true then
  133.         if direction == 1 then
  134.             direction = 2
  135.         elseif direction == 2 then
  136.             direction = 3
  137.         elseif direction == 3 then
  138.             direction = 4
  139.         elseif direction == 4 then
  140.             direction = 1
  141.         end
  142.     end
  143.     return ms
  144. end
  145.  
  146. function right()
  147.     rednet.send(turtle, textutils.serialize({"turnRight"}))
  148.     local id, ms = rec()
  149.     if ms[1] == true then
  150.         if direction == 1 then
  151.             direction = 4
  152.         elseif direction == 2 then
  153.             direction = 1
  154.         elseif direction == 3 then
  155.             direction = 2
  156.         elseif direction == 4 then
  157.             direction = 3
  158.         end
  159.     end
  160.     return ms
  161. end
  162.  
  163. function select(num)
  164.     rednet.send(turtle, textutils.serialize({"select", num}))
  165.     local id, ms = rec()
  166.     if ms[1] == true then
  167.         selected = num
  168.     end
  169.     return ms
  170. end
  171.  
  172. function icount(num)
  173.     rednet.send(turtle, textutils.serialize({"getItemCount", num}))
  174.     local id, ms = rec()
  175.     return ms
  176. end
  177.  
  178. function ispace(num)
  179.     rednet.send(turtle, textutils.serialize({"getItemSpace", num}))
  180.     local id, ms = rec()
  181.     return ms
  182. end
  183.  
  184. function dig()
  185.     rednet.send(turtle, textutils.serialize({"dig"}))
  186.     local id, ms = rec()
  187.     return ms
  188. end
  189.  
  190. function digup()
  191.     rednet.send(turtle, textutils.serialize({"digUp"}))
  192.     local id, ms = rec()
  193.     return ms
  194. end
  195.  
  196. function digdown()
  197.     rednet.send(turtle, textutils.serialize({"digDown"}))
  198.     local id, ms = rec()
  199.     return ms
  200. end
  201.  
  202. function place()
  203.     rednet.send(turtle, textutils.serialize({"place"}))
  204.     local id, ms = rec()
  205.     return ms
  206. end
  207.  
  208. function placeup()
  209.     rednet.send(turtle, textutils.serialize({"placeUp"}))
  210.     local id, ms = rec()
  211.     return ms
  212. end
  213.  
  214. function placedown()
  215.     rednet.send(turtle, textutils.serialize({"placeDown"}))
  216.     local id, ms = rec()
  217.     return ms
  218. end
  219.  
  220. function detect()
  221.     rednet.send(turtle, textutils.serialize({"detect"}))
  222.     local id, ms = rec()
  223.     return ms
  224. end
  225.  
  226. function detectup()
  227.     rednet.send(turtle, textutils.serialize({"detectUp"}))
  228.     local id, ms = rec()
  229.     return ms
  230. end
  231.  
  232. function detectdown()
  233.     rednet.send(turtle, textutils.serialize({"detectDown"}))
  234.     local id, ms = rec()
  235.     return ms
  236. end
  237.  
  238. function compare()
  239.     rednet.send(turtle, textutils.serialize({"compare"}))
  240.     local id, ms = rec()
  241.     return ms
  242. end
  243.  
  244. function compareup()
  245.     rednet.send(turtle, textutils.serialize({"compareUp"}))
  246.     local id, ms = rec()
  247.     return ms
  248. end
  249.  
  250. function comparedown()
  251.     rednet.send(turtle, textutils.serialize({"compareDown"}))
  252.     local id, ms = rec()
  253.     return ms
  254. end
  255.  
  256. function compareto(num)
  257.     rednet.send(turtle, textutils.serialize({"compareTo", num}))
  258.     local id, ms = rec()
  259.     return ms
  260. end
  261.  
  262. function transferto(num)
  263.     rednet.send(turtle, textutils.serialize({"transferTo", num}))
  264.     local id, ms = rec()
  265.     return ms
  266. end
  267.  
  268. function drop(num)
  269.     rednet.send(turtle, textutils.serialize({"drop", num}))
  270.     local id, ms = rec()
  271.     return ms
  272. end
  273.  
  274. function dropup(num)
  275.     rednet.send(turtle, textutils.serialize({"dropUp", num}))
  276.     local id, ms = rec()
  277.     return ms
  278. end
  279.  
  280. function dropdown(num)
  281.     rednet.send(turtle, textutils.serialize({"dropDown", num}))
  282.     local id, ms = rec()
  283.     return ms
  284. end
  285.  
  286. function suck()
  287.     rednet.send(turtle, textutils.serialize({"suck"}))
  288.     local id, ms = rec()
  289.     return ms
  290. end
  291.  
  292. function suckup()
  293.     rednet.send(turtle, textutils.serialize({"suckUp"}))
  294.     local id, ms = rec()
  295.     return ms
  296. end
  297.  
  298. function suckdown()
  299.     rednet.send(turtle, textutils.serialize({"suckDown"}))
  300.     local id, ms = rec()
  301.     return ms
  302. end
  303.  
  304. function dp()
  305.     rednet.send(turtle, textutils.serialize({"dp"}))
  306.     rec()
  307. end
  308.  
  309. function ran()
  310.     tm = tm + 1
  311.     local moving = nil
  312.     if math.random(1, 100) < 10 then
  313.         if last == 1 then
  314.             last = 2
  315.         else
  316.             if co[2] < sty then
  317.                 last = 1
  318.             end
  319.         end
  320.         moving = true
  321.     end
  322.     if math.random(1, 100) < 8 then
  323.         if math.random(1, 2) == 1 then
  324.             left()
  325.         else
  326.             right()
  327.         end
  328.     end
  329.     if moving then
  330.         if last == 1 then
  331.             digup()
  332.             up()
  333.         else
  334.             digdown()
  335.             down()
  336.         end
  337.     end
  338.     digup()
  339.     dig()
  340.     forward()
  341.     digup()
  342.     if tm == 31 then
  343.         dp()
  344.         tm = 0
  345.     end
  346.     save()
  347. end
  348.  
  349. function retx()
  350.     local togo = 0
  351.     if co[1] < start[1] then
  352.         togo = direction - 1
  353.     elseif co[1] > start[1] then
  354.         togo = direction - 3
  355.     end
  356.     if togo > 0 then
  357.         for i = 1, togo do
  358.             right()
  359.         end
  360.     elseif togo < 0 then
  361.         for i = 1, togo*-1 do
  362.             left()
  363.         end
  364.     end
  365.     if co[1] < start[1] then
  366.         for i = 1, start[1] - co[1] do
  367.             function lolz()
  368.                 dig()
  369.                 local d = forward()
  370.                 if d[1] == false then
  371.                     lolz()
  372.                 end
  373.             end
  374.             lolz()
  375.         end
  376.     elseif co[1] > start[1] then
  377.         for i = 1, co[1] - start[1] do
  378.             function lolz()
  379.                 dig()
  380.                 local d = forward()
  381.                 if d[1] == false then
  382.                     lolz()
  383.                 end
  384.             end
  385.             lolz()
  386.         end
  387.     end
  388. end
  389.  
  390. function retz()
  391.     local togo = 0
  392.     if co[3] < start[3] then
  393.         togo = direction - 4
  394.     elseif co[3] > start[3] then
  395.         togo = direction - 2
  396.     end
  397.     if togo > 0 then
  398.         for i = 1, togo do
  399.             right()
  400.         end
  401.     elseif togo < 0 then
  402.         for i = 1, togo*-1 do
  403.             left()
  404.         end
  405.     end
  406.     if co[3] < start[3] then
  407.         for i = 1, start[3] - co[3] do
  408.             function lolz()
  409.                 dig()
  410.                 local d = forward()
  411.                 if d[1] == false then
  412.                     lolz()
  413.                 end
  414.             end
  415.             lolz()
  416.         end
  417.     elseif co[3] > start[3] then
  418.         for i = 1, co[3] - start[3] do
  419.             function lolz()
  420.                 dig()
  421.                 local d = forward()
  422.                 if d[1] == false then
  423.                     lolz()
  424.                 end
  425.             end
  426.             lolz()
  427.         end
  428.     end
  429. end
  430.  
  431. function rety()
  432.     for i = 1, start[2] - co[2] do
  433.         function lolz()
  434.             digup()
  435.             local d = up()
  436.             if d[1] == false then
  437.                 lolz()
  438.             end
  439.         end
  440.         lolz()
  441.     end
  442. end
  443.  
  444. function ret()
  445.     retx()
  446.     retz()
  447.     rety()
  448. end
  449.  
  450. function drawlist(title, list, num)
  451.     clear()
  452.     print(title.."\n")
  453.     for i,v in pairs(list) do
  454.         if i == num then
  455.             print("> "..v)
  456.         else
  457.             print("  "..v)
  458.         end
  459.     end
  460. end
  461.  
  462. function getKey()
  463.     local rt = nil
  464.     function lop()
  465.         local e, a1 = os.pullEvent("key")
  466.         if a1 == 200 then
  467.             rt = "up"
  468.         elseif a1 == 208 then
  469.             rt = "down"
  470.         elseif a1 == 28 then
  471.             rt = "enter"
  472.         else
  473.             lop()
  474.         end
  475.     end
  476.     lop()
  477.     repeat sleep(0) until rt ~= nil
  478.     return rt
  479. end
  480.  
  481. function ch(title, list)
  482.     clear()
  483.     local ind = 1
  484.     drawlist(title, list, ind)
  485.     local rt = nil
  486.     cycle = function()
  487.         local ke = getKey()
  488.         if ke == "up" then
  489.             if ind > 1 then
  490.                 ind = ind - 1
  491.             else
  492.                 ind = #list
  493.             end
  494.             drawlist(title, list, ind)
  495.             cycle()
  496.         elseif ke == "down" then
  497.             if ind < #list then
  498.                 ind = ind + 1
  499.             else
  500.                 ind = 1
  501.             end
  502.             drawlist(title, list, ind)
  503.             cycle()
  504.         elseif ke == "enter" then
  505.             rt = ind
  506.         end
  507.     end
  508.     cycle()
  509.     repeat sleep(0) until rt ~= nil
  510.     return ind
  511. end
  512.  
  513. function main()
  514.     clear()
  515.     ports()
  516.     print("Turtle server running on "..os.getComputerID())
  517.     if not fs.exists("/save") then
  518.         write("Enter coordinate X: ")
  519.         local X = read()
  520.         write("Enter coordinate Y: ")
  521.         local Y = read()
  522.         write("Enter coordinate Z: ")
  523.         local Z = read()
  524.         sty = tonumber(Y) - 20
  525.         co = {tonumber(X), tonumber(Y), tonumber(Z)}
  526.         start = co
  527.         local fb = fs.open("/start", "w")
  528.         fb.write(textutils.serialize(co))
  529.         fb.close()
  530.     else
  531.         local fd = fs.open("/save", "r")
  532.         co = textutils.unserialize(fd.readAll())
  533.         fd.close()
  534.         local fd2 = fs.open("/direction", "r")
  535.         direction = textutils.unserialize(fd2.readAll())[1]
  536.         fd2.close()
  537.         local fd3 = fs.open("/start", "r")
  538.         start = textutils.unserialize(fd3.readAll())
  539.         fd3.close()
  540.     end
  541.     local ar = ch("What would you like to do?", {"Make turtle mine", "Make turtle come back"})
  542.     if ar == 1 then
  543.         for i = 1, 20 do
  544.             digdown()
  545.             down()
  546.         end
  547.         dp()
  548.         while true do
  549.             if returning == true then break end
  550.             ran()
  551.         end
  552.     else
  553.         ret()
  554.     end
  555. end
  556.  
  557. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement