Advertisement
BigBlow_

MobFarm-Global-Controller

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