Blackhome

Settings Manager

May 2nd, 2025 (edited)
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.67 KB | Gaming | 0 0
  1. -- pastebin get rncwTbUx SettingsManager
  2.  
  3. local SETTINGS_LABEL = "Settings"
  4. local COORD_FILE = "initial_coords.txt"
  5. local TASK_FILE = "task_list.txt" -- zentrale Taskliste auf der Settings-Disk
  6.  
  7. -- Funktion: Hole Disk-Laufwerk mit Label "Settings"
  8. function getSettingsDisk()
  9.     for _, side in ipairs(peripheral.getNames()) do
  10.         if peripheral.getType(side) == "drive" then
  11.             local disk = peripheral.wrap(side)
  12.             if disk.getDiskLabel() == SETTINGS_LABEL then
  13.                 return disk, disk.getMountPath()
  14.             end
  15.         end
  16.     end
  17.     return nil, nil
  18. end
  19.  
  20. -- Funktion: Überprüft, ob initial_coords.txt bereits existiert
  21. function coordsFileExists()
  22.     local _, path = getSettingsDisk()
  23.     if not path then return false end
  24.     return fs.exists(fs.combine(path, COORD_FILE))
  25. end
  26.  
  27. -- Funktion: Fragt den Nutzer nach einer Koordinate (in Form "x y z")
  28. function askForCoords(promptText)
  29.     while true do
  30.         print(promptText)
  31.         local input = read()
  32.         local x, y, z = input:match("(-?%d+)%s+(-?%d+)%s+(-?%d+)")
  33.         if x and y and z then
  34.             return tonumber(x), tonumber(y), tonumber(z)
  35.         else
  36.             print("Ungültiges Format. Bitte erneut eingeben als: x y z")
  37.         end
  38.     end
  39. end
  40.  
  41. -- Funktion: Speichert die beiden Koordinaten in initial_coords.txt
  42. function saveInitialCoords(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4, x5, y5, z5)
  43.     local _, path = getSettingsDisk()
  44.     if not path then error("Settings-Disk nicht gefunden!") end
  45.  
  46.     local fullPath = fs.combine(path, COORD_FILE)
  47.     local file = fs.open(fullPath, "w")
  48.     file.writeLine(string.format("%d,%d,%d", x1, y1, z1))
  49.     file.writeLine(string.format("%d,%d,%d", x2, y2, z2))
  50.     file.writeLine(string.format("%d,%d,%d", x3, y3, z3))
  51.     file.writeLine(string.format("%d,%d,%d", x4, y4, z4))
  52.     file.writeLine(string.format("%d,%d,%d", x5, y5, z5))
  53.     file.close()
  54.     print("Koordinaten erfolgreich gespeichert.")
  55. end
  56.  
  57. -- Funktion: Lädt Taskliste von Disk
  58. function loadTaskList(filePath)
  59.     if not fs.exists(filePath) then return {} end
  60.     local file = fs.open(filePath, "r")
  61.     local content = file.readAll()
  62.     file.close()
  63.     local data = textutils.unserialize(content)
  64.     return data or {}
  65. end
  66.  
  67. -- Funktion: Fügt Task zur Liste hinzu und speichert sie wieder
  68. function appendTaskToList(filePath, taskData)
  69.     local tasks = loadTaskList(filePath)
  70.     table.insert(tasks, taskData)
  71.     local file = fs.open(filePath, "w")
  72.     file.write(textutils.serialize(tasks))
  73.     file.close()
  74.     print("Neuer Task wurde erfolgreich gespeichert.")
  75. end
  76.  
  77.  
  78. -- Neue Funktion: Liest die Koordinaten der Kistenreihe aus der Settings-Disk
  79. local function loadInitialCoords()
  80.     local _, path = getSettingsDisk()
  81.     if not path then error("Settings-Disk nicht gefunden!") end
  82.  
  83.     local fullPath = fs.combine(path, COORD_FILE)
  84.     if not fs.exists(fullPath) then error("initial_coords.txt nicht gefunden!") end
  85.  
  86.     local file = fs.open(fullPath, "r")
  87.     local coords = {}
  88.     for i = 1, 2 do -- Nur die ersten zwei Zeilen (Kistenreihe)
  89.         local line = file.readLine()
  90.         local x, y, z = line:match("(-?%d+),(-?%d+),(-?%d+)")
  91.         table.insert(coords, {x = tonumber(x), y = tonumber(y), z = tonumber(z)})
  92.     end
  93.     file.close()
  94.     return coords[1], coords[2] -- Start, End
  95. end
  96.  
  97. -- Neue Funktion: Validiert Kistenposition
  98. local function validateChestCoord(inputCoord, startCoord, endCoord)
  99.     local dirX = endCoord.x - startCoord.x
  100.     local dirZ = endCoord.z - startCoord.z
  101.     local axis
  102.  
  103.     if dirX ~= 0 then
  104.         axis = "x"
  105.     elseif dirZ ~= 0 then
  106.         axis = "z"
  107.     else
  108.         return false, "Ungültige Start-/Endkoordinaten: keine Richtung erkennbar."
  109.     end
  110.  
  111.     local yModulo = startCoord.y % 7
  112.     if inputCoord.y % 7 ~= yModulo then
  113.         return false, string.format("Y-Koordinate muss y %% 7 == %d erfüllen.", yModulo)
  114.     end
  115.  
  116.     if axis == "x" then
  117.         if inputCoord.z % 4 ~= startCoord.z % 4 then
  118.             return false, string.format("Z-Koordinate muss z %% 4 == %d erfüllen.", startCoord.z % 4)
  119.         end
  120.         if dirX > 0 and inputCoord.x < startCoord.x then
  121.             return false, "X-Koordinate liegt hinter der Startposition."
  122.         elseif dirX < 0 and inputCoord.x > startCoord.x then
  123.             return false, "X-Koordinate liegt hinter der Startposition."
  124.         end
  125.         if inputCoord.x % 12 ~= startCoord.x % 12 then
  126.             return false, string.format("X-Koordinate muss x %% 12 == %d erfüllen.", startCoord.x % 12)
  127.         end
  128.     else -- z-Achse
  129.         if inputCoord.x % 4 ~= startCoord.x % 4 then
  130.             return false, string.format("X-Koordinate muss x %% 4 == %d erfüllen.", startCoord.x % 4)
  131.         end
  132.         if dirZ > 0 and inputCoord.z < startCoord.z then
  133.             return false, "Z-Koordinate liegt hinter der Startposition."
  134.         elseif dirZ < 0 and inputCoord.z > startCoord.z then
  135.             return false, "Z-Koordinate liegt hinter der Startposition."
  136.         end
  137.         if inputCoord.z % 12 ~= startCoord.z % 12 then
  138.             return false, string.format("Z-Koordinate muss z %% 12 == %d erfüllen.", startCoord.z % 12)
  139.         end
  140.     end
  141.  
  142.     return true
  143. end
  144.  
  145. -- Neue Funktion: Fragt solange nach Position, bis valide
  146. local function askForValidChestPosition()
  147.     local startCoord, endCoord = loadInitialCoords()
  148.  
  149.     while true do
  150.         local x, y, z = askForCoords("Position der ersten Kiste eingeben (x y z):")
  151.         local coord = {x = x, y = y, z = z}
  152.         local isValid, msg = validateChestCoord(coord, startCoord, endCoord)
  153.         if isValid then
  154.             return x, y, z
  155.         else
  156.             print("Ungültige Eingabe: " .. msg)
  157.         end
  158.     end
  159. end
  160.  
  161.  
  162. -- Funktion: Wiederholt Menü für Task-Erstellung
  163. function showTaskMenu(filePath)
  164.     while true do
  165.         print()
  166.         print("Was möchtest du tun?")
  167.         print("[1] Kisten per Task erstellen lassen")
  168.         print("[2] Bereits vorhandene Kisten initialisieren")
  169.         print("[3] Bestandsaufnahme durchführen")
  170.         print("[4] Beenden")
  171.  
  172.         write("Auswahl: ")
  173.         local choice = read()
  174.  
  175.         if choice == "1" or choice == "2" then
  176.             local x, y, z = askForValidChestPosition()
  177.             local taskType = (choice == "1") and "create_chests" or "initialize_chests"
  178.             local task = {
  179.                 taskType = taskType,
  180.                 x = x,
  181.                 y = y,
  182.                 z = z
  183.             }
  184.             appendTaskToList(filePath, task)
  185.  
  186.         elseif choice == "3" then
  187.             local task = {
  188.                 taskType = "check_inventory"
  189.             }
  190.             appendTaskToList(filePath, task)
  191.  
  192.         elseif choice == "4" then
  193.             print("Beende das Programm.")
  194.             break
  195.  
  196.         else
  197.             print("Ungültige Eingabe. Bitte wähle 1-4.")
  198.         end
  199.     end
  200. end
  201.  
  202. -- === Hauptprogramm ===
  203. print("Starte Settings-Setup...")
  204.  
  205. local _, path = getSettingsDisk()
  206. while not path do
  207.     print("Warte auf eingelegte Settings-Disk...")
  208.     sleep(1)
  209.     _, path = getSettingsDisk()
  210. end
  211.  
  212. local taskFilePath = fs.combine(path, TASK_FILE)
  213.  
  214. if coordsFileExists() then
  215.     print("initial_coords.txt existiert bereits.")
  216. else
  217.     print("Keine initial_coords.txt gefunden. Bitte Kisten Koordinaten eingeben.")
  218.     local x1, y1, z1 = askForCoords("Start-Koordinate eingeben (x y z):")
  219.     local x2, y2, z2 = askForCoords("End-Koordinate eingeben (x y z):")
  220.  
  221.     print("\nBitte Finish Block festlegen.")
  222.     local x3, y3, z3 = askForCoords("Finish-Koordinate eingeben (x y z):")
  223.  
  224.     print("\nBitte rechte Koordinate der Output Kiste eingeben.")
  225.     local x4, y4, z4 = askForCoords("Output-Koordinaten eingeben (x y z):")
  226.  
  227.     print("\nBitte Koordinate der Kiste mit Abbauturtle für refuels eingeben.")
  228.     local x5, y5, z5 = askForCoords("Refuel-Koordinaten eingeben (x y z):")
  229.  
  230.     print()
  231.     print("Sollen die Kisten jetzt manuell erstellt werden oder per Task?")
  232.     print("[1] Kisten existieren bereits")
  233.     print("[2] Kisten sollen per Task erstellt werden")
  234.     write("Auswahl (1 oder 2): ")
  235.     local choice = read()
  236.  
  237.     if choice == "2" then
  238.         local task = {
  239.             taskType = "create_chests",
  240.             x = x1,
  241.             y = y1,
  242.             z = z1
  243.         }
  244.         appendTaskToList(taskFilePath, task)
  245.     else
  246.         print("Kein Task erstellt. Es wird davon ausgegangen, dass die Kisten vorhanden sind.")
  247.     end
  248.  
  249.     saveInitialCoords(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4, x5, y5, z5)
  250. end
  251.  
  252. -- Starte interaktives Menü zur Erstellung weiterer Tasks
  253. showTaskMenu(taskFilePath)
  254.  
Advertisement
Add Comment
Please, Sign In to add comment