lego11

SGI - Tabellone

Aug 28th, 2026 (edited)
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- RGR - Tabellone partenze (e in futuro arrivi) treni alla stazione
  2. -- (C) 2026 interSex S.p.A.
  3. -- (C) 2026 Albannach Rail S.p.A.
  4.  
  5. -- Carica o genera la configurazione
  6. if fs.exists("config") == true then
  7.     local h = fs.open("config", "r")
  8.     ref_config = textutils.unserialize(h.readAll())
  9.     h.close()
  10. else
  11.     print("Inserisci il nome della stazione:")
  12.     local ref_name = read()
  13.     print("Ora inserisci il codice SGI della stazione:")
  14.     local ref_code = read()
  15.     print("Grazie!")
  16.     local h = fs.open("config", "w")
  17.     local obj = {name=ref_name, code=ref_code}
  18.     h.write(textutils.serialize(obj))
  19.     h.close()
  20.     print("Configurazione salvata con successo!")
  21.     print("Riavvio il computer...")
  22.     sleep(2)
  23.     os.reboot()
  24. end
  25.  
  26. -- Aggiorna lo script
  27. shell.run("rm startup")
  28. shell.run("pastebin get Zz9cXj2v startup")
  29.  
  30. -- Variabili da popolare
  31.  
  32. station_name = ref_config.name
  33. station_code = ref_config.code
  34. large_mode = true
  35. reduced = true
  36. target_width = 55
  37.  
  38. if reduced then
  39.     target_width = 39
  40. end
  41.  
  42. -- Recupero periferiche automatico (Copyright (C) Albannach Rail S.p.A. - Infotren Division)
  43.  
  44. screen_sides = {"left", "right", "top", "bottom", "back", "front"}
  45.  
  46. side = "invalid"
  47.  
  48. for i=1,6 do
  49.     if type(peripheral.wrap(screen_sides[i])) == "table" then
  50.         side = screen_sides[i]
  51.         break  
  52.     end
  53. end
  54.  
  55. if side == "invalid" then
  56.     print("Schermo non trovato")
  57.     exit()
  58. end
  59.  
  60. screen = peripheral.wrap(side)
  61.  
  62. screen.setTextScale(1)
  63.  
  64. -- Verifichiamo le specifiche
  65. width, height  = screen.getSize()
  66.  
  67. local scale = (width/target_width)
  68.  
  69. scale = scale + 0.24
  70.  
  71. if scale < 0.5 then
  72.     scale = 0.5
  73. end
  74.  
  75. screen.setTextScale(scale)
  76. width, height = screen.getSize()
  77.  
  78. if width < target_width then
  79.     scale = scale - 0.44
  80.     screen.setTextScale(scale)
  81.     width, height = screen.getSize()
  82. end
  83.  
  84. if width < target_width then
  85.     -- Adjust scale
  86.     print("DIMENSIONI TROPPO PICCOLE ANCHE CON SCALA SISTEMATA! "..width)
  87.     exit()
  88. end
  89.  
  90. if height < 6 then
  91.     print("DIMENSIONI TROPPO PICCOLE! (y) "..height)
  92.     exit()
  93. end
  94.  
  95. -- Definizione funzioni (copiate da lego11 obv)
  96. function clear()
  97.     sfondo(colors.black)
  98.     screen.clear()
  99.     screen.setCursorPos(1, 1)
  100. end
  101.  
  102. function clearRed()
  103.     sfondo(colors.red)
  104.     screen.clear()
  105.     screen.setCursorPos(1, 1)
  106. end
  107.  
  108. function colore(sfumatura)
  109.     screen.setTextColour(sfumatura)
  110. end
  111.  
  112. function sfondo(sfumaturaSfondo)
  113.     screen.setBackgroundColour(sfumaturaSfondo)
  114. end
  115.  
  116. function fineColore()
  117.     screen.setTextColour(colours.white)
  118. end
  119.  
  120. function fineSfondo()
  121.     screen.setBackgroundColour(colours.black)
  122. end
  123.  
  124. -- IMPLEMENTAZIONE DEL DRAWFILLEDBOX
  125. local function drawPixelInternal(xPos, yPos)
  126.     screen.setCursorPos(xPos, yPos)
  127.     screen.write(" ")
  128. end
  129.  
  130. local tColourLookup = {}
  131. for n = 1, 16 do
  132.     tColourLookup[string.byte("0123456789abcdef", n, n)] = 2 ^ (n - 1)
  133. end
  134.  
  135. function drawFilledBox(startX, startY, endX, endY, nColour)
  136.     if type(startX) ~= "number" or type(startX) ~= "number" or type(endX) ~= "number" or type(endY) ~= "number" or
  137.         (nColour ~= nil and type(nColour) ~= "number") then
  138.         error("Expected startX, startY, endX, endY, colour", 2)
  139.     end
  140.  
  141.     startX = math.floor(startX)
  142.     startY = math.floor(startY)
  143.     endX = math.floor(endX)
  144.     endY = math.floor(endY)
  145.  
  146.     if nColour then
  147.         screen.setBackgroundColor(nColour)
  148.     end
  149.     if startX == endX and startY == endY then
  150.         drawPixelInternal(startX, startY)
  151.         return
  152.     end
  153.  
  154.     local minX = math.min(startX, endX)
  155.     if minX == startX then
  156.         minY = startY
  157.         maxX = endX
  158.         maxY = endY
  159.     else
  160.         minY = endY
  161.         maxX = startX
  162.         maxY = startY
  163.     end
  164.  
  165.     for x = minX, maxX do
  166.         for y = minY, maxY do
  167.             drawPixelInternal(x, y)
  168.         end
  169.     end
  170. end
  171.  
  172. function titolo(testo)
  173.     drawFilledBox(1, 1, width, 1, colors.yellow)
  174.     screen.setCursorPos((width - #testo) / 2, 1)
  175.     colore(colors.black)
  176.     screen.write(testo)
  177.     sfondo(colors.black)
  178. end
  179.  
  180. spazio_usato = 0
  181. function scriviInSpazio(x, y, localwidth, testo, align)
  182.     spazio_usato = spazio_usato + localwidth
  183.  
  184.     if align == true then
  185.         screen.setCursorPos(x + (localwidth - #testo) / 2, y)
  186.     else
  187.         screen.setCursorPos(x, y)
  188.     end
  189.     screen.write(testo)
  190. end
  191.  
  192. while true do
  193.     -- Richiediamo i dati
  194.     local data = textutils.unserialize(http.get("https://rgr.rgbcraft.com/api/cc/tabellone.php?station="..station_code).readAll())
  195.     local gray = true
  196.  
  197.     clear()
  198.     titolo(station_name.." - Partenze")
  199.  
  200.     if large_mode == false then
  201.         drawFilledBox(1, 2, width, 2, colors.yellow)
  202.     else
  203.         drawFilledBox(1, 2, width, 2, colors.black)
  204.         colore(colors.yellow)
  205.     end
  206.  
  207.     if reduced == false then
  208.         scriviInSpazio(1, 2, 7, "    ", true)
  209.     else
  210.         spazio_usato = 1
  211.     end
  212.  
  213.     pos_dest = width-7-7-20
  214.  
  215.     if reduced then
  216.         pos_dest = width-7-7-5
  217.     end
  218.  
  219.     scriviInSpazio(spazio_usato, 2, 8, "Numero", true)
  220.     scriviInSpazio(spazio_usato, 2, 7, "Ora", true)
  221.     scriviInSpazio(spazio_usato, 2, pos_dest, "Destinazione", true)
  222.     scriviInSpazio(spazio_usato, 2, 5, "Bin", true)
  223.  
  224.     if reduced == false then
  225.         scriviInSpazio(spazio_usato, 2, 5, "Rit", true)
  226.         scriviInSpazio(spazio_usato, 2, 5, "   ", true)
  227.     end
  228.  
  229.     spazio_usato = 0
  230.  
  231.     for k, train in pairs(data.trains) do
  232.         local row = k+2
  233.  
  234.         if row >= height-1 then
  235.             break
  236.         end
  237.  
  238.         if large_mode == false then
  239.             if gray == false then
  240.                 drawFilledBox(1, row, width, row, colors.yellow)
  241.                 colore(colors.black)
  242.                 gray = true
  243.             else
  244.                 drawFilledBox(1, row, width, row, colors.black)
  245.                 colore(colors.white)
  246.                 gray = false  
  247.             end
  248.         else
  249.             drawFilledBox(1, row, width, row, colors.black)
  250.             colore(colors.yellow)
  251.         end
  252.  
  253.         if reduced == false then
  254.             scriviInSpazio(1, row, 7, train.company, true)
  255.         else
  256.             spazio_usato = 1
  257.         end
  258.         scriviInSpazio(spazio_usato, row, 8, train.classification.." "..tostring(train.number), true)
  259.         scriviInSpazio(spazio_usato, row, 7, train.time, true)
  260.  
  261.         if reduced then
  262.             scriviInSpazio(spazio_usato, row, pos_dest, " "..train.destination, false)
  263.         else
  264.             scriviInSpazio(spazio_usato, row, pos_dest, "  "..train.destination, false)
  265.         end
  266.         scriviInSpazio(spazio_usato, row, 5, train.platform, true)
  267.  
  268.         if reduced == false then
  269.             scriviInSpazio(spazio_usato, row, 5, train.delay, true)
  270.             scriviInSpazio(spazio_usato, row, 5, train.departing_ico, true)
  271.         end
  272.  
  273.         spazio_usato = 0
  274.     end
  275.  
  276.     -- Write message
  277.     message = data.message
  278.     pool = message.."  "..message.."  "..message.."  "..message
  279.     message_index = 0
  280.     speed = 0.18
  281.     spent = 0
  282.     name = "interSex S.p.A."
  283.  
  284.     while spent < 10 do
  285.         -- Set pos at the end
  286.         screen.setCursorPos(1, height)
  287.         colore(colors.yellow)
  288.         sfondo(colors.black)
  289.         screen.write(string.sub(message, message_index, message_index + width-#name))
  290.  
  291.         -- interSex S.p.A.
  292.         screen.setCursorPos(width-#name+1, height)
  293.         colore(colors.black)
  294.         sfondo(colors.yellow)
  295.         screen.write(name)
  296.  
  297.         message_index = message_index + 1
  298.         spent = spent + speed
  299.         sleep(speed)
  300.     end
  301.  
  302.     --screen.write(textutils.serialize(data))
  303.  
  304.     --sleep(10)
  305. end
Advertisement
Add Comment
Please, Sign In to add comment