Advertisement
Koridev

Untitled

Mar 25th, 2025 (edited)
470
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.47 KB | Gaming | 0 0
  1. -- server.lua
  2. -- AE2-Server, sammelt Daten vom meBridge und sendet sie per rednet
  3.  
  4. -------------------------
  5. -- 1) KONFIG
  6. -------------------------
  7. local meSide      = "top"        -- Da sitzt deine meBridge
  8. local modemSide   = "buttom"        -- Hier sitzt dein Wireless Modem
  9. local REFRESH_INT = 10            -- Alle x Sekunden Daten broadcasten
  10.  
  11. -------------------------
  12. -- 2) Init
  13. -------------------------
  14. local me = peripheral.wrap(meSide)
  15. if not me then
  16.   error("meBridge an '"..meSide.."' nicht gefunden!")
  17. end
  18.  
  19. local modem = peripheral.wrap(modemSide)
  20. if not modem then
  21.   error("Modem an '"..modemSide.."' nicht gefunden!")
  22. end
  23. rednet.open(modemSide)
  24.  
  25. -- Test, ob listCells existiert
  26. if not me.listCells then
  27.   error("meBridge hat keine Funktion 'listCells'! Version zu alt?")
  28. end
  29.  
  30. -------------------------
  31. -- 3) Hilfsfunktionen
  32. -------------------------
  33. -- Summiert usedBytes + totalBytes aller Cells
  34. local function getTotalUsedAndTotal(cells)
  35.   local sumUsed, sumTotal = 0, 0
  36.   for _, cell in ipairs(cells) do
  37.     sumUsed  = sumUsed  + (cell.usedBytes  or 0)
  38.     sumTotal = sumTotal + (cell.totalBytes or 0)
  39.   end
  40.   return sumUsed, sumTotal
  41. end
  42.  
  43. -- Sammelt alle Daten, die der Client braucht
  44. local function gatherData()
  45.   local rawCells   = me.listCells() or {}
  46.   local itemList   = me.listItems() or {}
  47.  
  48.   -- Zellen-Daten in einfaches Array packen (ID, used, total)
  49.   local cells = {}
  50.   for i, cell in ipairs(rawCells) do
  51.     table.insert(cells, {
  52.       usedBytes  = cell.usedBytes  or 0,
  53.       totalBytes = cell.totalBytes or 0,
  54.     })
  55.   end
  56.  
  57.   local sumUsed, sumTotal = getTotalUsedAndTotal(rawCells)
  58.   local freePercent = 0
  59.   if sumTotal > 0 then
  60.     freePercent = math.floor((sumTotal - sumUsed) / sumTotal * 100)
  61.   end
  62.  
  63.   -- Sortiere Items nach Menge DESC, für Detailanzeige
  64.   table.sort(itemList, function(a,b)
  65.     return (a.amount or 0) > (b.amount or 0)
  66.   end)
  67.  
  68.   -- Das senden wir an den Client
  69.   local data = {
  70.     cells       = cells,        -- Array der Zellen
  71.     itemCount   = #itemList,    -- Anzahl Items
  72.     freePercent = freePercent,  -- Prozent freier Speicher
  73.     items       = itemList,     -- Komplettes Item-Array für Detail
  74.   }
  75.  
  76.   return data
  77. end
  78.  
  79. -------------------------
  80. -- 4) Hauptschleife
  81. -------------------------
  82. while true do
  83.   -- Sammle Daten
  84.   local data = gatherData()
  85.  
  86.   -- Broadcast an alle Clients mit Protokoll "AE2_DATA"
  87.   rednet.broadcast(data, "AE2_DATA")
  88.  
  89.   sleep(REFRESH_INT)
  90. end
  91.  
Tags: lua
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement