Advertisement
MagmaLP

Mon with Bundled wires

Jan 11th, 2025 (edited)
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 14.86 KB | None | 0 0
  1. MonitorSide = "left"
  2. BundledWire1 = "front"
  3. BundledWire2 = "back"
  4.  
  5. NamenNummer = 0
  6. mon = peripheral.wrap(MonitorSide)
  7. redstone.setBundledOutput(BundledWire1, 0)
  8. mon.setBackgroundColor(colors.black)
  9. mon.setTextScale(1)
  10. mon.clear()
  11.  
  12. SystemStart = "JA"
  13.  
  14. function getMonitorSize()
  15.     monitor = peripheral.wrap(MonitorSide)
  16.     MonitorWidth, MonitorHeight = monitor.getSize()
  17.     MonitorMid = math.floor(MonitorWidth / 2)
  18.     print("Monitor Mitte:  " .. MonitorMid)
  19.     print("Monitor Breite: " .. MonitorWidth)
  20.     print("Monitor Höhe:   " .. MonitorHeight)
  21. end
  22.  
  23. function calc_color(color)
  24.     return math.pow(2, color - 1)
  25. end
  26.  
  27. function msg(gap, line, color, groundb, text)
  28.     mon.setBackgroundColor(calc_color(groundb))
  29.     mon.setCursorPos(gap,line)
  30.     mon.setTextColor(calc_color(color))
  31.     text = mon.write(text)
  32. end
  33.  
  34. function clearMonitor()
  35.     mon.setBackgroundColor(colors.black)
  36.     mon.setTextColor(colors.black)
  37.     mon.clear()
  38. end
  39.  
  40. function NameChangeMonitor()
  41.     local dateiname = "NameSave"
  42.     local function ladeNamen()
  43.         local namenListe = {}
  44.         if fs.exists(dateiname) then
  45.             local datei = fs.open(dateiname, "r")
  46.  
  47.             local i = 1
  48.             while true do
  49.                 local zeile = datei.readLine()
  50.                 if zeile == nil then break end
  51.                 namenListe[i] = zeile
  52.                 i = i + 1
  53.             end
  54.             datei.close()
  55.         else
  56.             print("Datei nicht gefunden.")
  57.         end
  58.         return namenListe
  59.     end
  60.  
  61.     local function speichereNamen(namenListe)
  62.         local datei = fs.open(dateiname, "w")
  63.         for _, zeile in ipairs(namenListe) do
  64.             datei.writeLine(zeile)
  65.         end
  66.         datei.close()
  67.     end
  68.  
  69.     local function aendereNamen()
  70.        
  71.         file = fs.open("local" , "r")
  72.         NamenNummer = file.readLine()
  73.         file.close()
  74.        
  75.         local namenListe = ladeNamen()
  76.         if NamenNummer == "ON" then
  77.             neuerName = "ON"
  78.         elseif NamenNummer == "OFF" then
  79.             neuerName = "OFF"
  80.         else
  81.             NamenNummer = tonumber(NamenNummer)
  82.             neuerName = read()
  83.         end
  84.  
  85.         -- Ersetze den Namen in der Liste
  86.         namenListe[NamenNummer] = "Wert_" .. NamenNummer .. ": " .. neuerName
  87.  
  88.         -- Speichere die geåA4nderte Liste zuråBCck in die Datei
  89.         speichereNamen(namenListe)
  90.     end
  91.     aendereNamen(NamenNummer)
  92.  
  93. end
  94.  
  95.  
  96.  
  97. dateiname = "NameSave"
  98. function ladeNamen()
  99.     local namenListe = {}
  100.     if fs.exists(dateiname) then
  101.         local datei = fs.open(dateiname, "r")    
  102.         local i = 1
  103.         while true do
  104.             local zeile = datei.readLine()
  105.             if zeile == nil then break end
  106.             namenListe[i] = zeile
  107.             i = i + 1
  108.         end    
  109.         datei.close()
  110.     end
  111.     return namenListe
  112. end
  113.  
  114.  
  115.  
  116. function extrahiereName(zeile)
  117.     local _, _, name = string.find(zeile, ": (.+)")
  118.     return name
  119. end
  120.  
  121.  
  122.  
  123. function setzeDynamischeVariablen(namenListe)
  124.     local variablenTabelle = {}
  125.     for i = 1, #namenListe do
  126.         local nameKey = "Wert_" .. i
  127.         local extrahierterName = extrahiereName(namenListe[i])      
  128.         variablenTabelle[nameKey] = extrahierterName
  129.     end
  130.     return variablenTabelle
  131. end
  132.  
  133. namenListe = ladeNamen()
  134. local variablenTabelle = setzeDynamischeVariablen(namenListe)
  135. print("alle Namen eingelesen")
  136.  
  137. function mainStatus()
  138.     -- VariablenTabelle neu laden bei jedem Schleifendurchlauf
  139.     local namenListe = ladeNamen()
  140.     local variablenTabelle = setzeDynamischeVariablen(namenListe)
  141.     local currentLine = 6  -- Startzeile bleibt konstant
  142.  
  143.     for i = 50, 74 do
  144.         local xpos = 3 + ((i - 50) % 5)
  145.         if variablenTabelle["Wert_" .. i] == "ON" then
  146.             msg(xpos, currentLine, 16, 6, " ")
  147.         else
  148.             msg(xpos, currentLine, 16, 15, " ")
  149.         end
  150.         -- Wenn 5 in einer Reihe -> Nächste Zeile
  151.         if (i - 50 + 1) % 5 == 0 then
  152.             currentLine = currentLine + 3  -- Zeilenwechsel
  153.         end
  154.     end
  155. end
  156.  
  157.  
  158.  
  159.  
  160.  
  161. function Editor1()
  162.     --Editor öffnen
  163.     while true do
  164.        
  165.         -- VariablenTabelle neu laden bei jedem Schleifendurchlauf
  166.         local namenListe = ladeNamen()
  167.         local variablenTabelle = setzeDynamischeVariablen(namenListe)
  168.        
  169.         mon.setCursorPos(1,1)
  170.         clearMonitor()
  171.         msg(MonitorWidth,01,08,16,"x")
  172.         msg(03,02,05,16,"Willkommen im Editor")
  173.         for i = 1,MonitorWidth do
  174.             msg(i,04,05,16,"~")
  175.         end
  176.  
  177.         msg(03,07,09,16,"Ab hier geht alles im PC weiter")
  178.         term.setCursorPos(1,1)
  179.         term.clear()
  180.         print("Editor:")
  181.         print("")
  182.         print("0 = Editor beenden")
  183.         print("1 = Überschrift: Name ändern")
  184.         print("2 = Kategorien:  Name ändern")
  185.         print("3 = Namen in den Kategorien ändern")
  186.         print(" ")
  187.         Eingabe = read()
  188.  
  189.         if Eingabe == "0" then
  190.             os.reboot()
  191.         elseif Eingabe == "1" then
  192.             print("Alter Name: " .. variablenTabelle["Wert_100"])
  193.             print("Neuer Name:")
  194.             NamenNummer = 100
  195.         elseif Eingabe == "2" then
  196.             print("Alte Namen:")
  197.             for i = 1,5 do
  198.                 print(i .. "= " .. variablenTabelle["Wert_" .. i])
  199.             end
  200.             NamenNummer = read()
  201.             print("Neuer Name:")
  202.         elseif Eingabe == "3" then
  203.             print("Kategorie Nummer wählen:")
  204.             for i = 1,5 do
  205.                 print(i .. "= " .. variablenTabelle["Wert_" .. i])
  206.             end
  207.             EingabeKategorie = read()
  208.  
  209.             if EingabeKategorie >= "1" and EingabeKategorie <= "5" then
  210.                 print("Functions Nummer wählen:")
  211.                 local startIndex = (tonumber(EingabeKategorie) - 1) * 5 + 6
  212.                 for i = 0, 4 do
  213.                     print((i + 1) .. " = " .. variablenTabelle["Wert_" .. (startIndex + i)])
  214.                 end
  215.  
  216.                 EingabeFunktion = tonumber(read())
  217.                 if EingabeFunktion >= 1 and EingabeFunktion <= 5 then
  218.                     NamenNummer = startIndex + (EingabeFunktion - 1)
  219.                     print("Neuer Name:")
  220.                 end
  221.             end
  222.         end
  223.  
  224.         file = fs.open("local" , "w")
  225.         file.write(NamenNummer)
  226.         file.close()
  227.  
  228.         NameChangeMonitor()
  229.         sleep(0.5)
  230.     end
  231. end
  232.  
  233.  
  234. function main()
  235.     --Überschrift
  236.     mon.setCursorPos(1,1)
  237.     clearMonitor()
  238.     msg(MonitorWidth,01,08,16,"x")
  239.     msg(02,02,05,16," " .. variablenTabelle["Wert_100"] .. "  ")
  240.     for i = 1,MonitorWidth do
  241.         msg(i,04,05,16,"~")
  242.     end
  243.    
  244.     --Statusanzeige
  245.     mainStatus()
  246.     --Kategorien
  247.     msg(10,06,01,12,"  " .. variablenTabelle["Wert_1"] .. "  ")
  248.     msg(10,09,01,12,"  " .. variablenTabelle["Wert_2"] .. "  ")
  249.     msg(10,12,01,12,"  " .. variablenTabelle["Wert_3"] .. "  ")
  250.     msg(10,15,01,12,"  " .. variablenTabelle["Wert_4"] .. "  ")
  251.     msg(10,18,01,12,"  " .. variablenTabelle["Wert_5"] .. "  ")
  252.    
  253.    
  254.     local event, button, X, Y = os.pullEvent("monitor_touch")  
  255.     if (X == MonitorWidth or X == MonitorWidth - 1) and (Y == 1 or Y == 2) then
  256.         Editor1()        
  257.     else
  258.         --Katergorie öffnen
  259.         local values = { [6] = "Wert_1", [9] = "Wert_2", [12] = "Wert_3", [15] = "Wert_4", [18] = "Wert_5" }
  260.         if X >= 10 and values[Y] then
  261.             file = fs.open("local", "w")
  262.             file.write(values[Y])
  263.             file.close()
  264.            
  265.             mon.setCursorPos(1,1)
  266.             clearMonitor()
  267.             Katergory()
  268.         end
  269.     end
  270.     main()
  271. end
  272.  
  273.  
  274.  
  275. function WireUpdate()
  276.     local namenListe = ladeNamen()
  277.     local variablenTabelle = setzeDynamischeVariablen(namenListe)
  278.    
  279.     -- Liste der Farben
  280.     local colors = {
  281.         colors.white,
  282.         colors.orange,
  283.         colors.magenta,
  284.         colors.lightBlue,
  285.         colors.yellow,
  286.         colors.lime,
  287.         colors.pink,
  288.         colors.gray,
  289.         colors.lightGray,
  290.         colors.cyan,
  291.         colors.purple,
  292.         colors.blue,
  293.         colors.brown,
  294.         colors.green,
  295.         colors.red,
  296.         colors.black
  297.     }
  298.  
  299.     local farbenAnzahl = 16  -- Anzahl der Farben (16)
  300.    
  301.     if SystemStart == "JA" then
  302.         print("Systemstart : JA")
  303.         for i = 50, 74, 1 do
  304.             if variablenTabelle["Wert_" .. i] == "ON" then
  305.                 local farbeIndex = ((i - 50) % farbenAnzahl) + 1
  306.                 local farbe = colors[farbeIndex]
  307.                
  308.                 if farbeIndex <= 16 then
  309.                     -- Die ersten 16 Farben gehen an BundledWire1
  310.                     sleep(0.5)
  311.                     redstone.setBundledOutput(BundledWire1, redstone.getBundledOutput(BundledWire1) + farbe)
  312.                 else
  313.                     -- Restliche Farben gehen an BundledWire2
  314.                     sleep(0.5)
  315.                     redstone.setBundledOutput(BundledWire2, redstone.getBundledOutput(BundledWire2) + farbe)
  316.                 end                        
  317.             end
  318.         end
  319.         SystemStart = "NEIN"
  320.         print("Systemstart : JA -> NEIN")
  321.        
  322.     elseif SystemStart == "NEIN" then
  323.         print(" ")
  324.         print("Systemstart : NEIN")
  325.        
  326.         file = fs.open("local2" , "r")
  327.         localWert = file.readLine()
  328.         file.close()
  329.        
  330.         for i = 50, 74, 1 do
  331.             local farbeIndex = ((i - 50) % farbenAnzahl) + 1
  332.             local farbe = colors[farbeIndex]
  333.            
  334.             if "Wert_" .. i == localWert then
  335.                 print("Test: Wert_" .. i .. " = " .. localWert)        
  336.                
  337.                 if farbeIndex <= 16 then
  338.                     sleep(0.5)
  339.                     redstone.setBundledOutput(BundledWire1, farbe)
  340.                 else
  341.                     sleep(0.5)
  342.                     redstone.setBundledOutput(BundledWire2, farbe)
  343.                 end    
  344.                 print("Wire Nr. " .. BundledWire1 .. "Farbe: " .. farbe)
  345.             end
  346.         end
  347.  
  348.     end  
  349. end
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358. function Katergory()
  359.     local namenListe = ladeNamen()
  360.     local variablenTabelle = setzeDynamischeVariablen(namenListe)
  361.    
  362.     -- Überschrift
  363.     mon.setCursorPos(1,3)
  364.     clearMonitor()
  365.     file = fs.open("local" , "r")
  366.     header = file.readLine()
  367.     file.close()
  368.     msg(MonitorWidth,01,08,16,"x")
  369.     msg(02,02,05,16," " .. variablenTabelle[header] .. "  ")
  370.    
  371.     for i = 1, MonitorWidth do
  372.         msg(i,04,01,08,"-")
  373.         msg(i,05,01,08," ")
  374.         msg(i,06,01,08,"-")
  375.     end
  376.     msg(01,05,01,08, "| Function")
  377.     msg(MonitorWidth - 09,05,01,08, "| Status |")
  378.    
  379.     -- Definiere eine Tabelle mit den Header-Werten und den entsprechenden Wertbereichen.
  380.     local headerToValues = {
  381.         ["Wert_1"] = {6, 10},
  382.         ["Wert_2"] = {11, 15},
  383.         ["Wert_3"] = {16, 20},
  384.         ["Wert_4"] = {21, 25},
  385.         ["Wert_5"] = {26, 30}
  386.     }
  387.  
  388.     -- Status Start-Werte für jede Kategorie (50, 55, 60 usw.)
  389.     local statusStartValues = {
  390.         ["Wert_1"] = 50,
  391.         ["Wert_2"] = 55,
  392.         ["Wert_3"] = 60,
  393.         ["Wert_4"] = 65,
  394.         ["Wert_5"] = 70
  395.     }
  396.  
  397.     -- Hole den Wertebereich basierend auf dem Header-Wert.
  398.     local wertebereich = headerToValues[header]
  399.     local statusStartIndex = statusStartValues[header] -- Hole den Status-Startwert je nach Kategorie
  400.  
  401.     -- Überprüfen, ob der Header einen gültigen Wert hat.
  402.     if wertebereich then
  403.         local startWert, endWert = wertebereich[1], wertebereich[2]
  404.  
  405.         -- Zeilenstart immer 7 bis 11
  406.         local zeile = 7
  407.         local wertIndex = startWert
  408.  
  409.         for i = 7, 11 do
  410.            
  411.             -- Hier gibst du den entsprechenden Wert aus, je nach Index.
  412.             local variablenKey = "Wert_" .. wertIndex  
  413.             local statusKey = "Wert_" .. statusStartIndex
  414.  
  415.             -- Hole den Status (ON/OFF) für den aktuellen Wert.
  416.             local status = variablenTabelle[statusKey] -- Auslesen aus der Datei
  417.  
  418.             if status == "ON" then
  419.                 statusAnzeige = "ON"
  420.             else
  421.                 statusAnzeige = "OFF"
  422.             end
  423.  
  424.             -- Gib die Werte auf dem Monitor aus.
  425.             if statusAnzeige == "ON" then
  426.                 for i = 1, MonitorWidth do
  427.                     msg(i, zeile, 01, 06, " ")
  428.                 end
  429.                 msg(1, zeile, 01, 06, "| " .. variablenTabelle[variablenKey] .. "  ")
  430.                 msg(MonitorWidth - 9, zeile, 01, 06, "|   " .. statusAnzeige .. "   |")
  431.             elseif statusAnzeige == "OFF" then
  432.                 for i = 1, MonitorWidth do
  433.                     msg(i, zeile, 01, 15, " ")
  434.                 end
  435.                 msg(1, zeile, 01, 15, "| " .. variablenTabelle[variablenKey] .. "  ")
  436.                 msg(MonitorWidth - 9, zeile, 01, 15, "|   " .. statusAnzeige .. "  |")
  437.             end
  438.             -- Zeilen- und Wert-Index hochzählen
  439.             zeile = zeile + 1
  440.             wertIndex = wertIndex + 1
  441.             statusStartIndex = statusStartIndex + 1 -- Status-Index hochzählen
  442.         end
  443.     else
  444.         print("Ungültiger header-Wert.")
  445.     end
  446.  
  447.     -- Abfrage für Klicks auf Zeile 6 bis 10
  448.     local event, button, X, Y = os.pullEvent("monitor_touch")
  449.    
  450.     -- Zeilen für die Status-Werte (7 bis 11 -> Status 50 bis 54,abhängig von der Kategorie)
  451.     if Y >= 7 and Y <= 11 then
  452.         local statusStartIndex = statusStartValues[header] + (Y - 7) -- Berechne den Status-Wert
  453.         local statusKey = "Wert_" .. statusStartIndex
  454.         print("Test statusStartIndex: " .. statusStartIndex)
  455.            
  456.         -- Wechsle den Status (ON/OFF)
  457.         if variablenTabelle[statusKey] == "ON" then
  458.             variablenTabelle[statusKey] = "OFF"
  459.         elseif variablenTabelle[statusKey] == "OFF" then
  460.             variablenTabelle[statusKey] = "ON"
  461.         end
  462.  
  463.         print("Wert_" .. statusStartIndex .. "->" .. variablenTabelle[statusKey])
  464.  
  465.         -- Datei einlesen
  466.         local fileName = "NameSave"
  467.         local file = fs.open(fileName, "r")
  468.         local content = file.readAll()
  469.         file.close()
  470.  
  471.         -- Den gewünschten Status ändern (nur die Zeile mit dem statusKey ersetzen)
  472.         local newLine = statusKey .. ": " .. variablenTabelle[statusKey]
  473.    
  474.  
  475.         file = fs.open("local2" , "w")
  476.         file.write("Wert_" .. statusStartIndex)
  477.         file.close()
  478.        
  479.         -- Ersetze nur die Zeile mit statusKey
  480.         content = content:gsub(statusKey .. ": [^\n]*", newLine) -- Diese Zeile nur ersetzen
  481.  
  482.         -- Die Datei mit dem neuen Inhalt überschreiben
  483.         file = fs.open(fileName, "w")
  484.         file.write(content)
  485.         file.close()
  486.  
  487.         -- Bildschirm neu laden
  488.         WireUpdate()
  489.         Katergory()
  490.     else
  491.         os.reboot()
  492.     end
  493.  
  494. end
  495.  
  496.  
  497.  
  498.  
  499.  
  500.    
  501.    
  502.    
  503.    
  504.    
  505. getMonitorSize()
  506. WireUpdate()
  507. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement