Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Configuration des spawners
- local spawners = {
- {id = 51, name = "Mob Mashers"},
- {id = 52, name = "Mob Fans"},
- {id = 53, name = "Lamps"},
- {id = 54, name = "Void Mod (WIP)"},
- {id = 55, name = "Blood Cleaner"}
- }
- -- Liste des spawners qui doivent etre actives au demarrage {1, 3}
- local activatedSpawners = {51, 52, 53, 55}
- -- Fonction pour obtenir l'horodatage
- local function getTimestamp()
- return os.date("%Y-%m-%d %H:%M:%S")
- end
- local modem = peripheral.find("modem") -- Trouve le modem sans fil
- if not modem then
- error("Aucun modem sans fil detecte")
- end
- modem.open(100) -- Ouvre le canal de communication
- local mon = peripheral.find("monitor")
- if not mon then
- error("Aucun ecran detecte")
- end
- mon.setTextScale(1) -- Ajuste la taille du texte
- local state = {} -- Stocke l'etat de chaque spawner
- -- Initialiser tous les spawners a "OFF"
- for i = 1, #spawners do
- state[spawners[i].id] = false
- end
- -- Affiche l'ecran de demarrage avec compte a rebours
- local function startupScreen()
- mon.clear()
- for i = 5, 0, -1 do
- mon.setCursorPos(5, 3)
- mon.setTextColor(colors.white)
- mon.write("Demarrage dans " .. i)
- -- Afficher le bouton "Passer"
- mon.setCursorPos(5, 5)
- mon.setTextColor(colors.yellow)
- mon.write("[Passer]")
- -- Attendre 1 seconde sauf si clic detecte
- local timer = os.startTimer(1)
- while true do
- local event, side, x, y = os.pullEvent()
- if event == "timer" and side == timer then
- break -- Timer expire, continuer le compte a rebours
- elseif event == "monitor_touch" and x >= 5 and x <= 11 and y == 5 then
- return -- Clic sur "Passer", sauter l'attente
- end
- end
- end
- end
- -- Desactive tous les spawners au demarrage sauf ceux dans activatedSpawners
- local function deactivateAllExceptActivated()
- for _, spawner in ipairs(spawners) do
- local isActivated = false
- -- Verifier si ce spawner est dans la liste activatedSpawners
- for _, activeID in ipairs(activatedSpawners) do
- if spawner.id == activeID then
- isActivated = true
- break
- end
- end
- -- Si le spawner n'est pas dans la liste, on l'eteint
- if not isActivated then
- modem.transmit(100, 100, {id = spawner.id, state = false})
- print(getTimestamp() .. " - ID " .. spawner.id .. " OFF")
- os.sleep(0.1) -- Pause pour eviter les pertes de signal
- end
- end
- end
- -- Active les spawners definis dans activatedSpawners
- local function activateSpawnersOnStart()
- for _, id in ipairs(activatedSpawners) do
- modem.transmit(100, 100, {id = id, state = true})
- print(getTimestamp() .. " - ID " .. id .. " ON")
- os.sleep(0.1)
- state[id] = true
- end
- end
- -- Affiche l'interface utilisateur
- local function drawUI()
- mon.clear()
- -- Affichage du titre en haut a gauche, en blanc
- mon.setTextColor(colors.white)
- mon.setCursorPos(1, 1)
- mon.write("System Control Panel :")
- -- Affichage des etats des spawners dans un tableau
- for i, spawner in ipairs(spawners) do
- -- Colonne de gauche pour le nom du spawner (toujours en blanc)
- mon.setCursorPos(1, i + 2)
- mon.setTextColor(colors.white)
- mon.write(spawner.name)
- -- Colonne de droite pour l'etat (ON/OFF) avec couleur
- mon.setCursorPos(20, i + 2)
- -- ON en vert ou OFF en rouge
- if state[spawner.id] then
- mon.setTextColor(colors.green) -- ON en vert
- mon.write("ON")
- else
- mon.setTextColor(colors.red) -- OFF en rouge
- mon.write("OFF")
- end
- end
- end
- -- Envoie l'ordre a un spawner
- local function sendCommand(spawnerID, newState)
- modem.transmit(100, 100, {id = spawnerID, state = newState})
- print(getTimestamp() .. " - ID " .. spawnerID .. " " .. (newState and "ON" or "OFF"))
- os.sleep(0.1)
- end
- -- Gere les clics sur l'ecran
- local function handleClick(x, y)
- local index = y - 2
- if spawners[index] then
- local spawner = spawners[index]
- -- Inverse l'etat actuel
- state[spawner.id] = not state[spawner.id]
- -- Envoie de l'etat a l'autre ordinateur
- sendCommand(spawner.id, state[spawner.id])
- drawUI() -- Mise a jour de l'interface
- end
- end
- -- Fonction d'ecoute des messages entrants
- local function listenForMessages()
- while true do
- -- Ecoute des messages des autres ordinateurs Master
- local _, _, _, _, message = os.pullEvent("modem_message")
- if message and message.id and message.state ~= nil then
- -- Met a jour l'etat du spawner sur cet ordinateur
- state[message.id] = message.state
- print(getTimestamp() .. " - Recu <- ID " .. message.id .. " " .. (message.state and "ON" or "OFF"))
- drawUI() -- Mise a jour de l'interface
- end
- end
- end
- -- Demarrage du programme
- startupScreen() -- Affiche l'ecran de demarrage
- deactivateAllExceptActivated() -- Desactive tous les spawners sauf ceux actives au demarrage
- activateSpawnersOnStart() -- Active les spawners definis
- drawUI() -- Affiche l'interface de controle
- -- Demarrer l'ecoute des messages en parallele avec la gestion des clics
- parallel.waitForAny(listenForMessages, function()
- while true do
- local event, side, x, y = os.pullEvent("monitor_touch")
- handleClick(x, y)
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement