Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local modem = peripheral.find("modem") or error("Pas de modem détecté", 0)
- rednet.open(peripheral.getName(modem))
- local monitor = peripheral.find("monitor") or error("Aucun moniteur détecté", 0)
- monitor.setTextScale(0.5) -- Ajuste la taille du texte pour afficher plus d'infos
- monitor.setTextScale(0.5)
- monitor.clear()
- local dataStore = {}
- local timeout = 30 -- Temps avant qu'un client inactif disparaisse
- -- Fonction pour choisir une couleur en fonction du pourcentage de remplissage
- local function getColor(percent)
- if percent < 10 then return colors.red end
- if percent < 20 then return colors.orange end
- if percent < 45 then return colors.yellow end
- if percent < 70 then return colors.lime end
- return colors.green
- end
- while true do
- -- Réception des données
- local senderId, message, protocol = rednet.receive("storage_monitor", 5)
- if message then
- if type(message) == "table" and message.name then
- -- Vérification si c'est un double coffre (peut contenir plus de 64 par slot)
- local maxStackSize = 64
- if message.max > 64 * 27 then
- maxStackSize = 128 -- Double coffre détecté (hypothèse)
- end
- -- Mise à jour des stocks et enregistrement du dernier signal
- dataStore[message.name] = {
- current = message.current,
- max = message.max,
- percent = message.percent,
- lastUpdate = os.clock(),
- maxStackSize = maxStackSize
- }
- end
- end
- -- Vérification des clients inactifs
- local currentTime = os.clock()
- for name, data in pairs(dataStore) do
- if currentTime - data.lastUpdate > timeout then
- dataStore[name] = nil -- Supprime les clients inactifs
- end
- end
- -- Trier les entrées par pourcentage de remplissage
- local sortedList = {}
- for name, data in pairs(dataStore) do
- table.insert(sortedList, {name = name, data = data})
- end
- table.sort(sortedList, function(a, b) return a.data.percent > b.data.percent end)
- -- Affichage sur le moniteur
- monitor.clear()
- monitor.setCursorPos(1, 1)
- monitor.write("=== Stock Monitor ===\n")
- local y = 2 -- Ligne de départ
- for _, entry in ipairs(sortedList) do
- local name = entry.name
- local data = entry.data
- local percentStr = string.format("%.2f", data.percent)
- -- Définition de la couleur du texte en fonction du taux de remplissage
- local textColor = getColor(data.percent)
- monitor.setTextColor(colors.yellow) -- Nom en jaune
- monitor.setCursorPos(1, y)
- monitor.write(name)
- monitor.setTextColor(colors.white) -- Valeurs en blanc
- monitor.setCursorPos(15, y)
- monitor.write(string.format("%d/%d", data.current, data.max))
- -- Ajout de la barre de progression
- monitor.setCursorPos(30, y)
- monitor.setTextColor(textColor)
- monitor.write(percentStr .. "%")
- -- Réinitialiser la couleur pour éviter les bugs
- monitor.setTextColor(colors.white)
- y = y + 1
- -- Si l'écran est plein, on arrête d'afficher
- if y > 19 then break end
- end
- sleep(1) -- Mise à jour toutes les secondes
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement