Advertisement
BigBlow_

MobFarm-Systeme-Controller-2

Mar 11th, 2025 (edited)
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.60 KB | None | 0 0
  1. -- Configuration des spawners
  2. local spawners = {
  3. {id = 51, name = "Mob Mashers"},
  4. {id = 52, name = "Mob Fans"},
  5. {id = 53, name = "Lamps"},
  6. {id = 54, name = "Void Mod (WIP)"},
  7. {id = 55, name = "Blood Cleaner"}
  8. }
  9.  
  10. -- Liste des spawners qui doivent etre actives au demarrage {1, 3}
  11. local activatedSpawners = {51, 52, 53, 55}
  12.  
  13. -- Fonction pour obtenir l'horodatage
  14. local function getTimestamp()
  15. return os.date("%Y-%m-%d %H:%M:%S")
  16. end
  17.  
  18. local modem = peripheral.find("modem") -- Trouve le modem sans fil
  19. if not modem then
  20. error("Aucun modem sans fil detecte")
  21. end
  22.  
  23. modem.open(100) -- Ouvre le canal de communication
  24. local mon = peripheral.find("monitor")
  25. if not mon then
  26. error("Aucun ecran detecte")
  27. end
  28.  
  29. mon.setTextScale(1) -- Ajuste la taille du texte
  30. local state = {} -- Stocke l'etat de chaque spawner
  31.  
  32. -- Initialiser tous les spawners a "OFF"
  33. for i = 1, #spawners do
  34. state[spawners[i].id] = false
  35. end
  36.  
  37. -- Affiche l'ecran de demarrage avec compte a rebours
  38. local function startupScreen()
  39. mon.clear()
  40.  
  41. for i = 5, 0, -1 do
  42. mon.setCursorPos(5, 3)
  43. mon.setTextColor(colors.white)
  44. mon.write("Demarrage dans " .. i)
  45.  
  46. -- Afficher le bouton "Passer"
  47. mon.setCursorPos(5, 5)
  48. mon.setTextColor(colors.yellow)
  49. mon.write("[Passer]")
  50.  
  51. -- Attendre 1 seconde sauf si clic detecte
  52. local timer = os.startTimer(1)
  53. while true do
  54. local event, side, x, y = os.pullEvent()
  55. if event == "timer" and side == timer then
  56. break -- Timer expire, continuer le compte a rebours
  57. elseif event == "monitor_touch" and x >= 5 and x <= 11 and y == 5 then
  58. return -- Clic sur "Passer", sauter l'attente
  59. end
  60. end
  61. end
  62. end
  63.  
  64. -- Desactive tous les spawners au demarrage sauf ceux dans activatedSpawners
  65. local function deactivateAllExceptActivated()
  66. for _, spawner in ipairs(spawners) do
  67. local isActivated = false
  68.  
  69. -- Verifier si ce spawner est dans la liste activatedSpawners
  70. for _, activeID in ipairs(activatedSpawners) do
  71. if spawner.id == activeID then
  72. isActivated = true
  73. break
  74. end
  75. end
  76.  
  77. -- Si le spawner n'est pas dans la liste, on l'eteint
  78. if not isActivated then
  79. modem.transmit(100, 100, {id = spawner.id, state = false})
  80. print(getTimestamp() .. " - ID " .. spawner.id .. " OFF")
  81. os.sleep(0.1) -- Pause pour eviter les pertes de signal
  82. end
  83. end
  84. end
  85.  
  86. -- Active les spawners definis dans activatedSpawners
  87. local function activateSpawnersOnStart()
  88. for _, id in ipairs(activatedSpawners) do
  89. modem.transmit(100, 100, {id = id, state = true})
  90. print(getTimestamp() .. " - ID " .. id .. " ON")
  91. os.sleep(0.1)
  92. state[id] = true
  93. end
  94. end
  95.  
  96. -- Affiche l'interface utilisateur
  97. local function drawUI()
  98. mon.clear()
  99.  
  100. -- Affichage du titre en haut a gauche, en blanc
  101. mon.setTextColor(colors.white)
  102. mon.setCursorPos(1, 1)
  103. mon.write("System Control Panel :")
  104.  
  105. -- Affichage des etats des spawners dans un tableau
  106. for i, spawner in ipairs(spawners) do
  107. -- Colonne de gauche pour le nom du spawner (toujours en blanc)
  108. mon.setCursorPos(1, i + 2)
  109. mon.setTextColor(colors.white)
  110. mon.write(spawner.name)
  111.  
  112. -- Colonne de droite pour l'etat (ON/OFF) avec couleur
  113. mon.setCursorPos(20, i + 2)
  114.  
  115. -- ON en vert ou OFF en rouge
  116. if state[spawner.id] then
  117. mon.setTextColor(colors.green) -- ON en vert
  118. mon.write("ON")
  119. else
  120. mon.setTextColor(colors.red) -- OFF en rouge
  121. mon.write("OFF")
  122. end
  123. end
  124. end
  125.  
  126. -- Envoie l'ordre a un spawner
  127. local function sendCommand(spawnerID, newState)
  128. modem.transmit(100, 100, {id = spawnerID, state = newState})
  129. print(getTimestamp() .. " - ID " .. spawnerID .. " " .. (newState and "ON" or "OFF"))
  130. os.sleep(0.1)
  131. end
  132.  
  133. -- Gere les clics sur l'ecran
  134. local function handleClick(x, y)
  135. local index = y - 2
  136. if spawners[index] then
  137. local spawner = spawners[index]
  138. -- Inverse l'etat actuel
  139. state[spawner.id] = not state[spawner.id]
  140.  
  141. -- Envoie de l'etat a l'autre ordinateur
  142. sendCommand(spawner.id, state[spawner.id])
  143. drawUI() -- Mise a jour de l'interface
  144. end
  145. end
  146.  
  147. -- Fonction d'ecoute des messages entrants
  148. local function listenForMessages()
  149. while true do
  150. -- Ecoute des messages des autres ordinateurs Master
  151. local _, _, _, _, message = os.pullEvent("modem_message")
  152. if message and message.id and message.state ~= nil then
  153. -- Met a jour l'etat du spawner sur cet ordinateur
  154. state[message.id] = message.state
  155. print(getTimestamp() .. " - Recu <- ID " .. message.id .. " " .. (message.state and "ON" or "OFF"))
  156. drawUI() -- Mise a jour de l'interface
  157. end
  158. end
  159. end
  160.  
  161. -- Demarrage du programme
  162. startupScreen() -- Affiche l'ecran de demarrage
  163. deactivateAllExceptActivated() -- Desactive tous les spawners sauf ceux actives au demarrage
  164. activateSpawnersOnStart() -- Active les spawners definis
  165. drawUI() -- Affiche l'interface de controle
  166.  
  167. -- Demarrer l'ecoute des messages en parallele avec la gestion des clics
  168. parallel.waitForAny(listenForMessages, function()
  169. while true do
  170. local event, side, x, y = os.pullEvent("monitor_touch")
  171. handleClick(x, y)
  172. end
  173. end)
  174.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement