Thor_s_Crafter

awDrac

Apr 6th, 2016
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 9.51 KB | None | 0 0
  1. -- Automatische Awakened Draconium Farm --
  2. -- Draconic Evolution --
  3. -- von Thor_s_Crafter --
  4. -- Version 1.0 --
  5.  
  6. t = turtle
  7. local anzahl = 0
  8. local withScreen = false
  9. local recID = 0
  10. local msg = {"","",""}
  11.  
  12. shell.run("label set draconiumTurtle")
  13.  
  14. function autoUpdate()
  15.     if not fs.exists("startup") then
  16.         local file = fs.open("startup","w")
  17.         file.writeLine("shell.run(\"rm draconium\")")
  18.         file.writeLine("shell.run(\"pastebin get u4B8E9DJ draconium\")")
  19.         file.writeLine("shell.run(\"draconium\")")
  20.         file.close()
  21.     end
  22. end
  23.  
  24. function start()
  25.     term.clear()
  26.     term.setCursorPos(1,1)
  27.     print("-- Draconium Turtle --")
  28.     print("Programmbeschreibung: ")
  29.     print("Diese Turtle stellt automatisch Awakened Draconium her.")
  30.     print("Nach Abschluss eines Durchlaufs muss jedoch das Awakened Draconium von Hand abgebaut werden.")
  31.     print("Zusaetzlich koennen Statusinformationen des Programms auf einem PC mit Monitor ausgegeben werden.")
  32.     getEnter()
  33.     local yn = yesNoInput("Soll eine detaillierte Erklaerung ueber das Programm angezeigt werden (j/n)?")
  34.     if  yn then
  35.         displayInfos()
  36.     end
  37. end
  38.  
  39. function displayInfos()
  40.     term.clear()
  41.     term.setCursorPos(1,1)
  42.     print("-- Aufbau der Draconium Farm --")
  43.     print("Benoetigte Materialien:")
  44.     print("- 1 Mining- oder Advanced Mining Turtle")
  45.     print("- 4 Kisten")
  46.     print("- Obsidian")
  47.     print("Optionale Materialien: ")
  48.     print("- 1 Computer mit einem Wireless Modem")
  49.     print("- 8 Monitore (4 breit,2 hoch)")
  50.     print("- 1 Wireless Modem fuer die Turtle")
  51.     getEnter()
  52.     term.clear()
  53.     term.setCursorPos(1,1)
  54.     print("-- Aufbau der Draconium Farm --")
  55.     print("Aufbau:")
  56.     print("Ein Obsidianraum. Mindestmaß: 4x4x4 Bloecke (Außenmaß).")
  57.     print("Die Turtle muss aussen vor eine Wand platziert werden. Hoehe: 2-3 Bloecke über dem Obsidian Boden")
  58.     print("Die 4 Kisten muessen rechts,hinten,links und oberhalb der Turtle sein.")
  59.     getEnter()
  60.     term.clear()
  61.     term.setCursorPos(1,1)
  62.     print("-- Aufbau der Draconium Farm --")
  63.     print("Inhalt der Kisten:")
  64.     print("- links: Charged Draconium Bloecke (4 Stk.)")
  65.     print("- hinten: Drachenherzen (1 Stk.)")
  66.     print("- rechts: Draconic Cores (16 Stk.)")
  67.     print("- oben: TNT (1 Stk.)")
  68.     getEnter()
  69.     term.clear()
  70.     term.setCursorPos(1,1)
  71.     print("-- Aufbau der Draconium Farm --")
  72.     print("Optionaler Aufbau mit Bildschirm:")
  73.     print("Einen extra Computer aufbauen (Position beliebig. Am Besten in der Naehe der Farm).")
  74.     print("Einen Monitor (4 breit, 2 hoch) an eine Seite des Computers anschließen.")
  75.     print("Den Computer und die Turtle mit einem Wireless Modem ausstatten.")
  76.     print("Beim Computer muss das Modem an eine beliebige Seite hingebaut werden.")
  77.     getEnter()
  78.     term.clear()
  79.     term.setCursorPos(1,1)
  80.     print("-- Aufbau der Draconium Farm --")
  81.     print("Die Turtle fuehrt einen selbststaendig durch diesen Prozess,")
  82.     print("wenn der Modus \"Statusanzeige auf dem Bildschirm anzeigen\" gewaehlt wird.")
  83.     print()
  84.     print("Weitere Information + Bilder + Videos zum Aufbau findet ihr auf meinem YouTube-Kanal.:")
  85.     print("https://www.youtube.com/channel/UCEG-Oq2LlJwkrqYu_AvfK0Q")
  86.     print("oder Suche nach Thor_s_Crafter")
  87.     getEnter()
  88. end
  89.  
  90. function screen()
  91.     local yn = yesNoInput("Soll das Programm Statusinformationen ueber einen Bildschirm anzeigen (j/n)?")
  92.     if yn then
  93.         withScreen = true
  94.    
  95.         term.clear()
  96.         term.setCursorPos(1,1)
  97.        
  98.         --Suche Modem
  99.         local pList = peripheral.getNames()
  100.         for i=1,#pList do
  101.             if peripheral.getType(pList[i]) == "modem" then
  102.                 rednet.open(pList[i])
  103.                 modem = pList[i]
  104.             end
  105.         end
  106.        
  107.         --Wenn Modem nicht gefunden bitte anschließen
  108.         if modem == nil then
  109.             print("Bitte die Turtle mit einem Wireless Modem ausstatten.")
  110.             print("Dazu bitte ein Wireless Modem in Slot 16 legen.")
  111.             t.select(16)
  112.             getEnter()
  113.             while not  (t.getItemDetail().name == "ComputerCraft:CC-Peripheral") do
  114.                 term.clear()
  115.                 term.setCursorPos(1,1)
  116.                 print("Das ist kein Wireless Modem!")
  117.                 print("Bitte ein Wireless Modem in Slot 16 legen!")
  118.                 getEnter()
  119.             end
  120.             t.equipLeft()
  121.             if t.getItemCount() > 0 then
  122.                 t.equipRight()
  123.             end
  124.         end
  125.        
  126.         --Suche Modem erneut
  127.         local pList = peripheral.getNames()
  128.         for i=1,#pList do
  129.             if peripheral.getType(pList[i]) == "modem" then
  130.                 rednet.open(pList[i])
  131.                 modem = pList[i]
  132.             end
  133.         end    
  134.        
  135.         local idPresent = loadID()
  136.        
  137.         if isPresent == false then         
  138.             term.clear()
  139.             term.setCursorPos(1,1)
  140.             print("Bitte einen Computer aufstellen und dort folgendes eingeben:")
  141.             print("pastebin get ZYjNXvH5 draconium")
  142.             print("und danach")
  143.             print("draconium")
  144.             print()
  145.        
  146.             local id,msg,protocol
  147.             while not (msg == "test" and protocol == "draconium") do
  148.                 rednet.broadcast("test","draconium")
  149.                 id,msg,protocol = rednet.receive("draconium",3)
  150.             end
  151.             recID = id
  152.             print("Einrichtung abgeschlossen.")
  153.             sleep(0.5)
  154.        
  155.             term.clear()
  156.             term.setCursorPos(1,1)
  157.             local  yn = yesNoInput("Soll die Computer ID gespeichert werden (j/n)?")
  158.             if yn then
  159.                 local file = fs.open("id","w")
  160.                 file.writeLine(id)
  161.                 file.close()
  162.             end
  163.         end
  164.     end
  165. end
  166.  
  167. function loadID()
  168.     if fs.exists("id") then
  169.         local file = fs.open("id","r")
  170.         recID = tonumber(file.readLine())
  171.         file.close()
  172.         return true
  173.     else
  174.         return false
  175.     end
  176. end
  177.  
  178. function userInput()
  179.     if t.getFuelLevel() < 100 then
  180.         fuelInput()
  181.     end
  182.     term.clear()
  183.     term.setCursorPos(1,1)
  184.     print("Wie viele Runden sollen durchlaufen werden?")
  185.     write("Eingabe: ")
  186.     local input = read()
  187.     anzahl = tonumber(input)
  188. end
  189.  
  190. function fuelInput()
  191.     term.clear()
  192.     term.setCursorPos(1,1)
  193.     t.select(16)
  194.     print("Bitte Fuel nachfuellen!")
  195.     print("Fuel bitte in Slot 16 legen")
  196.     write("Enter druecken...")
  197.     getEnter()
  198.     t.refuel()
  199.     fuel = t.getFuelLevel()
  200. end
  201.  
  202. function getEnter()
  203.     write("Enter druecken...")
  204.     local event,key = os.pullEvent("key")
  205.     while key ~= 28 do
  206.         sleep(0.5)
  207.         event,key = os.pullEvent("key")
  208.     end
  209. end
  210.  
  211. function yesNoInput(msg)
  212.     local input
  213.     while not (input == "j" or input == "n") do
  214.         term.clear()
  215.         term.setCursorPos(1,1)
  216.         print(msg)
  217.         write("Eingabe: ")
  218.         input = read()
  219.     end
  220.     if input == "j" then
  221.         return true
  222.     elseif input == "n" then
  223.         return false
  224.     end
  225. end
  226.  
  227. ---
  228.  
  229. function takeItems()
  230.     if withScreen then
  231.         msg[2] = "Nehme Items aus den Kisten"
  232.         rednet.send(recID,msg)
  233.     end
  234.     t.turnLeft()
  235.     -- Charged Draconium Blöcke
  236.     t.select(5)
  237.     local success = t.suck(4)
  238.     if not (success and t.getItemCount() == 4) then
  239.         t.drop()
  240.         t.turnRight()
  241.         if withScreen then
  242.             msg[2] = "Nicht genug Charged Draconium Bloecke"
  243.             rednet.send(recID,msg)
  244.         end
  245.         error("Nicht genug Charged Draconium Blöcke.")
  246.     end
  247.     t.turnLeft()
  248.     -- Drachenherz
  249.     t.select(6)
  250.     local success2 = t.suck(1)
  251.     if not success2 then
  252.         t.turnRight()
  253.         t.select(5)
  254.         t.drop()
  255.         t.turnRight()
  256.         if withScreen then
  257.             msg[2] = "Nicht genug Drachenherzen."
  258.             rednet.send(recID,msg)
  259.         end
  260.         error("Nicht genug Drachenherzen.")
  261.     end
  262.     t.turnLeft()
  263.     -- Draconic Cores
  264.     t.select(7)
  265.     local success3 = t.suck(16)
  266.     if not (success3 and t.getItemCount() == 16) then
  267.         t.drop()
  268.         t.turnRight()
  269.         t.select(6)
  270.         t.drop()
  271.         t.turnRight()
  272.         t.select(5)
  273.         t.drop()
  274.         t.turnRight()
  275.         if withScreen then
  276.             msg[2] = "Nicht genug Draconic Cores"
  277.             rednet.send(recID,msg)
  278.         end
  279.         error("Nicht genug Draconic Cores.")
  280.     end
  281.     t.turnLeft()
  282.     -- TNT
  283.     t.select(8)
  284.     local success4 = t.suckUp(1)
  285.     if not success4 then
  286.         t.turnRight()
  287.         t.select(7)
  288.         t.drop()
  289.         t.turnRight()
  290.         t.select(6)
  291.         t.drop()
  292.         t.turnRight()
  293.         t.select(5)
  294.         t.drop()
  295.         t.turnRight()
  296.         if withScreen then
  297.             msg[2] = "Nicht genug TNT"
  298.             rednet.send(recID,msg)
  299.         end
  300.         error("Nicht genug TNT")
  301.     end
  302. end
  303.  
  304.  
  305. function placeAll()
  306. for i=1,anzahl,1 do
  307.     term.clear()
  308.     term.setCursorPos(1,1)
  309.     print("Durchlauf "..i.."/"..anzahl)
  310.     print("Bitte Magnten o.ä. ausschalten!")
  311.     print()
  312.    
  313.     if withScreen then
  314.         msg[1] = i.."/"..anzahl
  315.         msg[2] = "Setze Draconium Bloecke"
  316.         rednet.send(recID,msg)     
  317.     end
  318.    
  319.    
  320.     t.select(1)
  321.     -- Obsidian abbauen
  322.     t.dig()
  323.     t.forward()
  324.     t.forward()
  325.     t.forward()
  326.    
  327.     print("Setze Bloecke/TNT/Drachenherz...")
  328.     -- Draconium setzen
  329.     t.select(5)
  330.     t.placeDown()
  331.     t.forward()
  332.     t.placeDown()
  333.     t.turnRight()
  334.     t.forward()
  335.     t.placeDown()
  336.     t.turnRight()
  337.     t.forward()
  338.     t.placeDown()
  339.     t.turnRight()
  340.    
  341.     if withScreen then
  342.         msg[2] = "Setze TNT"
  343.         rednet.send(recID,msg)
  344.     end
  345.    
  346.     -- TNT setzen
  347.     t.select(8)
  348.     t.place()
  349.     -- Drachenherz hinwerfen
  350.     t.turnRight()
  351.     t.back()
  352.     t.select(6)
  353.     t.drop(1)
  354.     t.turnLeft()
  355.     t.forward()
  356.     -- TNT anzünden
  357.     t.turnRight()
  358.     rs.setOutput("front",true)
  359.     sleep(1)
  360.     rs.setOutput("front",false)
  361.     t.back()
  362.     t.back()
  363.     t.select(1)
  364.     t.place()
  365.    
  366.     if withScreen then
  367.         msg[2] = "Warte auf aktiviertes Drachenherz"
  368.         rednet.send(recID,msg)
  369.     end
  370.    
  371.     -- Warte bis TNT gezündet ist
  372.     print("Warte 10 Sekunden...")
  373.     sleep(10)
  374.    
  375.     if withScreen then
  376.         msg[2] = "Setze Draconic Cores"
  377.         rednet.send(recID,msg)
  378.     end
  379.    
  380.     -- Draconic Cores hinwerfen
  381.     print("Setze Draconic Cores...")
  382.     t.dig()
  383.     t.forward()
  384.     t.select(7)
  385.     -- Zurück
  386.     t.drop(16)
  387.     t.back()
  388.     t.select(1)
  389.     t.place()
  390.    
  391.     if withScreen then
  392.         msg[2] = "Bitte das Draconium abbauen!"
  393.         rednet.send(recID,msg)
  394.     end
  395.    
  396.     print("Warte auf naechsten Durchlauf...")
  397.     sleep(30)
  398.     if i < anzahl then
  399.         takeItems()
  400.     end
  401. end
  402. end
  403.  
  404. autoUpdate()
  405. start()
  406. screen()
  407. userInput()
  408. if anzahl > 0 then
  409.     takeItems()
  410. end
  411. placeAll()
  412.  
  413. if withScreen then
  414.     msg[1] = "0/0"
  415.     msg[2] = "Fertig"
  416.     rednet.send(recID,msg)
  417. end
  418.  
  419. term.clear()
  420. term.setCursorPos(1,1)
  421. print("-- Fertig --")
  422.  
  423. os.reboot()
Advertisement
Add Comment
Please, Sign In to add comment