Advertisement
lego11

MinieraTyrian

Aug 22nd, 2020 (edited)
1,702
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local maxw, maxh = term.getSize()
  2.  
  3. function cartaNonValida()
  4.     clearRed()
  5.     print("Carta non valida o corrotta.")
  6.     print("")
  7.     print("Premere un tasto per uscire")
  8.     os.pullEvent("key")
  9.     os.reboot()
  10. end
  11.  
  12. function cartaVuota()
  13.     clearRed()
  14.     print("Carta smagnetizzata o vuota.")
  15.     print("")
  16.     print("Premere un tasto per uscire")
  17.     os.pullEvent("key")
  18.     os.reboot()
  19. end
  20.  
  21. function creditoInsufficiente()
  22.     clearRed()
  23.     print("Credito insufficiente.")
  24.     print("")
  25.     print("Premere un tasto per uscire")
  26.     os.pullEvent("key")
  27.     os.reboot()
  28. end
  29.  
  30. function materialeNonDisponibile()
  31.     clearRed()
  32.     print("Materiale esaurito.")
  33.     print("")
  34.     print("Premere un tasto per uscire")
  35.     os.pullEvent("key")
  36.     os.reboot()
  37. end
  38.  
  39. -- IMPLEMENTAZIONE DEL DRAWFILLEDBOX
  40. local function drawPixelInternal(xPos, yPos)
  41.     term.setCursorPos(xPos, yPos)
  42.     term.write(" ")
  43. end
  44.  
  45. local tColourLookup = {}
  46. for n = 1, 16 do
  47.     tColourLookup[string.byte("0123456789abcdef", n, n)] = 2 ^ (n - 1)
  48. end
  49.  
  50. function drawFilledBox(startX, startY, endX, endY, nColour)
  51.     if type(startX) ~= "number" or type(startX) ~= "number" or type(endX) ~=
  52.         "number" or type(endY) ~= "number" or
  53.         (nColour ~= nil and type(nColour) ~= "number") then
  54.         error("Expected startX, startY, endX, endY, colour", 2)
  55.     end
  56.  
  57.     startX = math.floor(startX)
  58.     startY = math.floor(startY)
  59.     endX = math.floor(endX)
  60.     endY = math.floor(endY)
  61.  
  62.     if nColour then term.setBackgroundColor(nColour) end
  63.     if startX == endX and startY == endY then
  64.         drawPixelInternal(startX, startY)
  65.         return
  66.     end
  67.  
  68.     local minX = math.min(startX, endX)
  69.     if minX == startX then
  70.         minY = startY
  71.         maxX = endX
  72.         maxY = endY
  73.     else
  74.         minY = endY
  75.         maxX = startX
  76.         maxY = startY
  77.     end
  78.  
  79.     for x = minX, maxX do for y = minY, maxY do drawPixelInternal(x, y) end end
  80. end
  81.  
  82. function clear()
  83.     sfondo(colors.lightBlue)
  84.     term.clear()
  85.     term.setCursorPos(1, 1)
  86. end
  87.  
  88. function clearRed()
  89.     sfondo(colors.red)
  90.     term.clear()
  91.     term.setCursorPos(1, 1)
  92. end
  93.  
  94.  
  95. function colore(sfumatura) term.setTextColour(sfumatura) end
  96.  
  97. function sfondo(sfumaturaSfondo) term.setBackgroundColour(sfumaturaSfondo) end
  98.  
  99. function titolo(testo)
  100.     drawFilledBox(1, 1, maxw, 1, colors.yellow)
  101.     term.setCursorPos((maxw - #testo) / 2, 1)
  102.     colore(colors.black)
  103.     term.write(testo)
  104.     sfondo(colors.lightBlue)
  105. end
  106.  
  107. clear()
  108.  
  109. titolo("MINIERA DI TYRIAN - MATERIALI ALL'INGROSSO")
  110. -- startx, starty, endx, endy
  111. drawFilledBox(3, 5, 15, 7, colors.blue)
  112. drawFilledBox(3, 10, 15, 12, colors.red)
  113. drawFilledBox(3, 15, 15, 17, colors.lightGray)
  114. term.setCursorPos(4, 6)
  115. colore(colors.white)
  116. sfondo(colors.blue)
  117. term.write("Apatite")
  118.  
  119. term.setCursorPos(4, 11)
  120. colore(colors.white)
  121. sfondo(colors.red)
  122. term.write("Redstone")
  123.  
  124. term.setCursorPos(4, 16)
  125. colore(colors.black)
  126. sfondo(colors.lightGray)
  127. term.write("Stagno")
  128.  
  129. while true do
  130.     drawFilledBox(18, 5, 50, 17, colors.yellow)
  131.     term.setCursorPos(19, 6)
  132.     colore(colors.black)
  133.     sfondo(colors.yellow)
  134.     term.write("ISTRUZIONI - LEGGERE:")
  135.     term.setCursorPos(19, 8)
  136.     term.write("1. Posizionare il vagone sotto")
  137.     term.setCursorPos(19, 9)
  138.     term.write("   l'erogatore appropriato")
  139.     term.setCursorPos(19, 10)
  140.     term.write("2. Controllare che la spia")
  141.     term.setCursorPos(19, 11)
  142.     term.write("   «presenza vagone» sia accesa")
  143.     term.setCursorPos(19, 12)
  144.     term.write("3. Selezionare su questo PC")
  145.     term.setCursorPos(19, 13)
  146.     term.write("   il prodotto desiderato")
  147.     term.setCursorPos(19, 14)
  148.     term.write("4. Attendere l'erogazione")
  149.     term.setCursorPos(19, 15)
  150.     term.write("5. Non appena l'operazione sarà")
  151.     term.setCursorPos(19, 16)
  152.     term.write("   terminata liberare l'area")
  153.  
  154.     local event, par1, x, y = os.pullEvent("mouse_click")
  155.     if event == "mouse_click" and x >= 3 and x <= 15 and y >= 5 and y <= 7 then
  156.         cavo1 = colors.white
  157.         cavo2 = colors.lightBlue
  158.         cavo3 = colors.pink
  159.         prezzo = 100
  160.         materiale = "Apatite"
  161.         break
  162.     elseif event == "mouse_click" and x >= 3 and x <= 15 and y >= 10 and y <= 12 then
  163.         cavo1 = colors.orange
  164.         cavo2 = colors.yellow
  165.         cavo3 = colors.gray
  166.         prezzo = 850
  167.         materiale = "Redstone"
  168.         break
  169.     elseif event == "mouse_click" and x >= 3 and x <= 15 and y >= 15 and y <= 17 then
  170.         cavo1 = colors.magenta
  171.         cavo2 = colors.lime
  172.         cavo3 = colors.lightGray
  173.         prezzo = 490
  174.         materiale = "Stagno"
  175.         break
  176.     end
  177.     sleep(1)
  178. end
  179. clear()
  180.  
  181. if colors.test(redstone.getBundledInput("back"), cavo3) == true then
  182.     materialeNonDisponibile()
  183. end
  184.  
  185. while true do
  186.     titolo("Vendita di un vagone di " .. materiale)
  187.  
  188.     term.setCursorPos(3, 5)
  189.     print("Si sta per acquistare un vagone di " .. materiale)
  190.     print("\n  Il prezzo è di " .. prezzo .. " IC")
  191.     colore(colors.white)
  192.     print("\n\n  Inserire la carta per procedere\n  con l'acquisto")
  193.  
  194.     drawFilledBox(15, 14, 36, 16, colors.red)
  195.     term.setCursorPos(22, 15)
  196.     colore(colors.white)
  197.     term.write("Annulla")
  198.  
  199.     m = peripheral.wrap("bottom") -- magcard
  200.     m.setInsertCardLight(true)
  201.  
  202.     event, par1, x, y = os.pullEvent()
  203.     if event == "mouse_click" and x >= 15 and x <= 36 and y >= 14 and y <= 16 then
  204.         m.setInsertCardLight(false)
  205.         os.reboot()
  206.     elseif event == "mag_swipe" then
  207.         m.setInsertCardLight(false)
  208.         break
  209.     end
  210. end
  211.  
  212. if par1 == nil then cartaVuota() end
  213.  
  214. tab = textutils.unserialize(par1)
  215.  
  216. if type(tab) ~= "table" then cartaNonValida() end
  217.  
  218. if tab.t ~= "cc" then cartaNonValida() end
  219.  
  220. if tab.e ~= "BN" then cartaNonValida() end
  221.  
  222. credito = tonumber(tab.v)
  223.  
  224. if prezzo > credito then
  225.     creditoInsufficiente()
  226. end
  227.  
  228. clear()
  229. titolo("Conferma pagamento")
  230.  
  231. print("\n\nInserire nuovamente la carta per confermare il pagamento")
  232.  
  233. tabr = {}
  234.  
  235. tabr.t = tab.t
  236. tabr.e = tab.e
  237. tabr.p = tab.p
  238. tabr.v = tostring(credito - prezzo)
  239.  
  240. ncr = textutils.serialize(tabr)
  241. m.setInsertCardLight(true)
  242. m.beginWrite(ncr,"BN Credit")
  243. os.pullEvent("mag_write_done")
  244. m.setInsertCardLight(false)
  245.  
  246. clear()
  247. titolo("Erogazione in corso")
  248.  
  249. print("\n\nErogazione " .. materiale .. " in corso...")
  250.  
  251. redstone.setBundledOutput("back", cavo1)
  252. sleep(1)
  253. redstone.setBundledOutput("back", 0)
  254.  
  255. erogazione = false
  256.  
  257. while erogazione == false do
  258.     erogazione = colors.test(redstone.getBundledInput("back"), cavo2)
  259.     sleep(1)
  260. end
  261. os.reboot()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement