Advertisement
MrFoxit

StorageCounterAutomatique - Server

Mar 12th, 2025 (edited)
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.33 KB | None | 0 0
  1. local modem = peripheral.find("modem") or error("Pas de modem détecté", 0)
  2. rednet.open(peripheral.getName(modem))
  3.  
  4. local monitor = peripheral.find("monitor") or error("Aucun moniteur détecté", 0)
  5. monitor.setTextScale(0.5)  -- Ajuste la taille du texte pour afficher plus d'infos
  6. monitor.setTextScale(0.5)
  7. monitor.clear()
  8.  
  9. local dataStore = {}
  10. local timeout = 30  -- Temps avant qu'un client inactif disparaisse
  11.  
  12. -- Fonction pour choisir une couleur en fonction du pourcentage de remplissage
  13. local function getColor(percent)
  14.     if percent < 10 then return colors.red end
  15.     if percent < 20 then return colors.orange end
  16.     if percent < 45 then return colors.yellow end
  17.     if percent < 70 then return colors.lime end
  18.     return colors.green
  19. end
  20.  
  21. while true do
  22.     -- Réception des données
  23.     local senderId, message, protocol = rednet.receive("storage_monitor", 5)
  24.    
  25.     if message then
  26.         if type(message) == "table" and message.name then
  27.             -- Vérification si c'est un double coffre (peut contenir plus de 64 par slot)
  28.             local maxStackSize = 64
  29.             if message.max > 64 * 27 then
  30.                 maxStackSize = 128  -- Double coffre détecté (hypothèse)
  31.             end
  32.  
  33.             -- Mise à jour des stocks et enregistrement du dernier signal
  34.             dataStore[message.name] = {
  35.                 current = message.current,
  36.                 max = message.max,
  37.                 percent = message.percent,
  38.                 lastUpdate = os.clock(),
  39.                 maxStackSize = maxStackSize
  40.             }
  41.         end
  42.     end
  43.  
  44.     -- Vérification des clients inactifs
  45.     local currentTime = os.clock()
  46.     for name, data in pairs(dataStore) do
  47.         if currentTime - data.lastUpdate > timeout then
  48.             dataStore[name] = nil  -- Supprime les clients inactifs
  49.         end
  50.     end
  51.  
  52.     -- Trier les entrées par pourcentage de remplissage
  53.     local sortedList = {}
  54.     for name, data in pairs(dataStore) do
  55.         table.insert(sortedList, {name = name, data = data})
  56.     end
  57.     table.sort(sortedList, function(a, b) return a.data.percent > b.data.percent end)
  58.  
  59.     -- Affichage sur le moniteur
  60.     monitor.clear()
  61.     monitor.setCursorPos(1, 1)
  62.     monitor.write("=== Stock Monitor ===\n")
  63.  
  64.     local y = 2  -- Ligne de départ
  65.     for _, entry in ipairs(sortedList) do
  66.         local name = entry.name
  67.         local data = entry.data
  68.         local percentStr = string.format("%.2f", data.percent)
  69.  
  70.         -- Définition de la couleur du texte en fonction du taux de remplissage
  71.         local textColor = getColor(data.percent)
  72.         monitor.setTextColor(colors.yellow)  -- Nom en jaune
  73.         monitor.setCursorPos(1, y)
  74.         monitor.write(name)
  75.  
  76.         monitor.setTextColor(colors.white)  -- Valeurs en blanc
  77.         monitor.setCursorPos(15, y)
  78.         monitor.write(string.format("%d/%d", data.current, data.max))
  79.  
  80.         -- Ajout de la barre de progression
  81.         monitor.setCursorPos(30, y)
  82.         monitor.setTextColor(textColor)
  83.         monitor.write(percentStr .. "%")
  84.  
  85.         -- Réinitialiser la couleur pour éviter les bugs
  86.         monitor.setTextColor(colors.white)
  87.  
  88.         y = y + 1
  89.  
  90.         -- Si l'écran est plein, on arrête d'afficher
  91.         if y > 19 then break end
  92.     end
  93.  
  94.     sleep(1)  -- Mise à jour toutes les secondes
  95. end
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement