costante = 1 local maxw, maxh = term.getSize() m = peripheral.wrap("top") m.write(" PECTEN") m.setCursorPos(1,3) m.write("Diesel:") m.setCursorPos(1,4) m.write(costante) m.setCursorPos(1,5) m.write("IC/s.") function creditoInsufficiente() clearRed() print("Credito insufficiente.") print("") print("Premere un tasto per uscire") os.pullEvent("key") os.reboot() end function gasolioNonDisponibile() clearRed() print("Gasolio esaurito.") print("") print("Premere un tasto per uscire") os.pullEvent("key") os.reboot() end -- IMPLEMENTAZIONE DEL DRAWFILLEDBOX local function drawPixelInternal(xPos, yPos) term.setCursorPos(xPos, yPos) term.write(" ") end local tColourLookup = {} for n = 1, 16 do tColourLookup[string.byte("0123456789abcdef", n, n)] = 2 ^ (n - 1) end function drawFilledBox(startX, startY, endX, endY, nColour) if type(startX) ~= "number" or type(startX) ~= "number" or type(endX) ~= "number" or type(endY) ~= "number" or (nColour ~= nil and type(nColour) ~= "number") then error("Expected startX, startY, endX, endY, colour", 2) end startX = math.floor(startX) startY = math.floor(startY) endX = math.floor(endX) endY = math.floor(endY) if nColour then term.setBackgroundColor(nColour) end if startX == endX and startY == endY then drawPixelInternal(startX, startY) return end local minX = math.min(startX, endX) if minX == startX then minY = startY maxX = endX maxY = endY else minY = endY maxX = startX maxY = startY end for x = minX, maxX do for y = minY, maxY do drawPixelInternal(x, y) end end end function clear() sfondo(colors.yellow) term.clear() term.setCursorPos(1, 1) end function clearRed() sfondo(colors.red) term.clear() term.setCursorPos(1, 1) end function colore(sfumatura) term.setTextColour(sfumatura) end function sfondo(sfumaturaSfondo) term.setBackgroundColour(sfumaturaSfondo) end function fineColore() term.setTextColour(colours.white) end function fineSfondo() term.setBackgroundColour(colours.black) end function titolo(testo) drawFilledBox(1, 1, maxw, 1, colors.red) term.setCursorPos((maxw - #testo) / 2, 1) colore(colors.black) term.write(testo) sfondo(colors.red) end function errore(errore) sfondo(colors.red) colore(colors.white) term.clear() term.setCursorPos(1, 1) titolo("Errore irreversibile") term.setCursorPos(1, 3) sfondo(colors.red) colore(colors.white) print(errore) print("\n\n\nAttendere qualche secondo...") os.sleep(5) os.reboot() end clear() titolo("DISTRIBUTORE DI VPower® PECTEN®") -- startx, starty, endx, endy drawFilledBox(3, 4, 15, 6, colors.red) drawFilledBox(3, 8, 15, 10, colors.red) drawFilledBox(3, 12, 15, 14, colors.red) drawFilledBox(3, 16, 15, 18, colors.red) term.setCursorPos(4, 5) colore(colors.white) sfondo(colors.red) term.write("16 secchi") term.setCursorPos(4, 9) colore(colors.white) sfondo(colors.red) term.write("32 secchi") term.setCursorPos(4, 13) colore(colors.white) sfondo(colors.red) term.write("Pieno Loco") term.setCursorPos(4, 17) colore(colors.white) sfondo(colors.red) term.write("Pieno Vagone") while true do drawFilledBox(18, 5, 50, 17, colors.yellow) term.setCursorPos(19, 6) colore(colors.black) sfondo(colors.yellow) term.write("ISTRUZIONI - LEGGERE:") term.setCursorPos(19, 8) term.write("1. Posizionare il vagone/loco") term.setCursorPos(19, 9) term.write(" sotto l'erogatore appropriato") term.setCursorPos(19, 10) term.write("2. Controllare che il vagone") term.setCursorPos(19, 11) term.write(" o loco siano vuoti.") term.setCursorPos(19, 12) term.write("3. Selezionare su questo PC") term.setCursorPos(19, 13) term.write(" la quantità desiderata") term.setCursorPos(19, 14) term.write("4. Attendere l'erogazione") term.setCursorPos(19, 15) term.write("5. Non appena l'operazione sarà") term.setCursorPos(19, 16) term.write(" terminata liberare l'area") local event, par1, x, y = os.pullEvent("mouse_click") if event == "mouse_click" and x >= 3 and x <= 15 and y >= 4 and y <= 6 then qta = 16 materiale = "16 secchi" prezzo = qta * costante break elseif event == "mouse_click" and x >= 3 and x <= 15 and y >= 8 and y <= 10 then qta = 32 materiale = "32 secchi" prezzo = qta * costante break elseif event == "mouse_click" and x >= 3 and x <= 15 and y >= 12 and y <= 14 then qta = 160 materiale = "Pieno Loco" prezzo = qta * costante break elseif event == "mouse_click" and x >= 3 and x <= 15 and y >= 16 and y <= 18 then qta = 208 prezzo = qta * costante materiale = "Pieno Vagone" break end sleep(1) end clear() if redstone.getInput("back") == true then errore("Gasolio esaurito") end sfondo(colours.blue) term.clear() term.setCursorPos(1, 1) titolo("Paga con Nebraska Pay") sfondo(colours.blue) colore(colors.white) print( "\n\nInserire i propri dati. Premere Enter per confermare i dati inseriti. \nSe i dati sono corretti, il campo diventerà verde. Se sono errati, il programma chiederà di reinserirli nuovamente.") -- nomeutente term.setCursorPos(1, 9) term.write("Nome utente:") term.setCursorPos(15, 9) fineColore() utenteAccettato = false conteggioErrori = 0 while utenteAccettato == false do utente = read() checkuser = http.get( "http://172.16.20.220/luanet/servlets/nebraskapay.php?auth=no&richiesta=verifica&utente=" .. utente).readAll() tabcheckuser = textutils.unserialize(checkuser) if tabcheckuser.stato == "OK" then term.setCursorPos(15, 9) colore(colours.lime) term.write(utente) fineColore() utenteAccettato = true else term.setCursorPos(15, 9) colore(colours.red) term.write("Utente errato! ") sleep(2) term.setCursorPos(15, 9) fineColore() term.write(" ") term.setCursorPos(15, 9) conteggioErrori = conteggioErrori + 1 if conteggioErrori > 2 then term.setCursorPos(15, 9) colore(colours.red) errore("Troppi tentativi di immissione errati ") end end end colore(colours.white) term.setCursorPos(1, 11) term.write("Password:") term.setCursorPos(15, 11) conteggioErrori = 0 passAccettata = false while passAccettata == false do fineColore() password = read("#") colore(colours.black) checkuser = http.get( "http://172.16.20.220/luanet/servlets/nebraskapay.php?auth=" .. password .. "&richiesta=addebito&valore=0&utente=" .. utente).readAll() risposta = textutils.unserialize(checkuser) if risposta.stato == "OK" then term.setCursorPos(15, 11) colore(colours.lime) term.write("############## ") fineColore() passAccettata = true else term.setCursorPos(15, 11) colore(colours.red) term.write("Password errata! ") conteggioErrori = conteggioErrori + 1 sleep(2) term.setCursorPos(15, 11) term.write(" ") term.setCursorPos(15, 11) if conteggioErrori > 2 then term.setCursorPos(15, 11) colore(colours.red) errore("Troppi tentativi di immissione errati") end end end -- Mostra saldo term.clear() term.clear() term.setCursorPos(1, 1) titolo("Paga con Nebraska Pay") sfondo(colours.blue) colore(colors.white) print("\n\nSaldo disponibile: " .. risposta.saldo .. " IC") if tonumber(risposta.saldo) >= tonumber(prezzo) then prezzoAccettato = true else errore("Disponibilità insufficiente!") end term.setCursorPos(1, 3) term.write("Invio di ") term.write(prezzo) term.write(" IC a favore di ") term.write("PECTEN") print("\n\nConfermare l'operazione?") colore(colors.yellow) print("\n\nInvia il denaro Annulla") while true do event, key, x, y = os.pullEvent() if event == "mouse_click" and x < 16 and y == 8 then inviaDenaro = http.get( "http://172.16.20.220/luanet/servlets/nebraskapay.php?auth=" .. password .. "&utente=" .. utente .. "&richiesta=trasferimento&valore=" .. prezzo .. "&beneficiario=RGCorp").readAll() risultatoInvio = textutils.unserialize(inviaDenaro) if risultatoInvio.stato == "OK" then colore(colors.white) break else clear() errore("Errore durante il pagamento") end elseif event == "mouse_click" and x > 18 and y == 8 then errore("Pagamento annullato dall'utente.") end end clear() titolo("Erogazione in corso") print("\n\nErogazione di " .. materiale .. " di gasolio in corso...") ben = peripheral.wrap("back") ben.makeRequest(ben.getItemIdentifierIDFor(21258, 18), qta) sleep(10) term.setTextColor(colors.black) term.setBackgroundColor(colors.black) shell.run("rm startup") shell.run("pastebin get 5WVAm8cT startup") os.reboot()