TIMAS_Bro

bank.lua

Oct 9th, 2023 (edited)
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. os.loadAPI("/Base64")
  2. os.loadAPI("uap")
  3. os.loadAPI("lg/lg")
  4. rednet.open("back")
  5. lg.setup("term")
  6. local balance = nil
  7. local screen = 1
  8. local card = nil
  9. local psw = nil
  10. local name = nil
  11. function saveCreds(id,psw)
  12.   local cf = fs.open("/bank/creds","w")
  13.   cf.writeLine(id)
  14.   cf.writeLine(psw)
  15.   cf.close()
  16.   local cardff = fs.open("card","w")
  17.   cardff.write(id)
  18.   cardff.close()
  19. end
  20. function writeCreds()
  21.   local cf = fs.open("/bank/creds","r")
  22.   if cf then
  23.     cardf = cf.readLine()
  24.     pswf = cf.readLine()
  25.     cf.close()
  26.     if cardf and pswf then
  27.       term.setBackgroundColor(colors.gray)
  28.       term.setTextColor(colors.white)
  29.       term.setCursorPos(2,10)
  30.       term.write(cardf)
  31.       card = cardf
  32.       term.setCursorPos(2,14)
  33.       term.write(pswf)
  34.       psw = pswf
  35.     end
  36.   else
  37.   end
  38. end
  39. function drawMAIN()
  40. uap.upd()
  41. term.setBackgroundColor(colors.white)
  42. term.clear()
  43. term.setCursorPos(9,3)
  44. term.setTextColor(colors.red)
  45. term.write("Creatopico")
  46. term.setCursorPos(12,4)
  47. term.write("Bank")
  48. local sx,sy = term.getSize()
  49. term.setBackgroundColor(colors.red)
  50. for i=1,sx do
  51.   term.setCursorPos(i,6)
  52.   term.write(" ")
  53. end
  54. term.setTextColor(colors.gray)
  55. term.setCursorPos(12,8)
  56. term.write("LOGIN")
  57. term.setCursorPos(10,10)
  58. term.write("REGISTER")
  59. for i=1,sx do
  60.   term.setCursorPos(i,14)
  61.   term.write(" ")
  62. end
  63. uap.upd()
  64. end
  65. drawMAIN()
  66. local soffset = 0
  67. function drawHistory(offset)
  68.         screen = 5
  69.         lg.fillScreen(colors.white)
  70.         lg.fill(1,lg.getSize().x,3,3,colors.red)
  71.         lg.drawText(2,3,colors.white,colors.red,"Istorija Perevodov")
  72.         rednet.send(40,Base64.encode("getlt "..card.." "..psw),"bank44")
  73.         local sId = nil
  74.         local msg = nil
  75.         local prt = nil
  76.         repeat
  77.           event, senderId, message, distance = os.pullEvent("rednet_message")
  78.           sId = senderId
  79.           msg = message
  80.           prt = distance
  81.         until prt ~= "base44" and sId == 40
  82.         gi = 1
  83.         for i=1, #msg do
  84.           gi = i + offset
  85.           if msg[gi] then
  86.           lg.drawText(2,5+i,colors.red,colors.white,"- "..msg[gi])
  87.           end
  88.           if i == lg.getSize().y - 4 then break end
  89.         end
  90.         lg.drawBT("close1",2,10,lg.getSize().y-1,lg.getSize().y-1,colors.white,colors.red,"Nazad")
  91.         if offset == 0 then
  92.         lg.drawBT("up",lg.getSize().x,lg.getSize().x,17,17,colors.white,colors.gray,"\30")
  93.         else
  94.         lg.drawBT("up",lg.getSize().x,lg.getSize().x,17,17,colors.white,colors.red,"\30")
  95.         end
  96.         lg.drawBT("down",lg.getSize().x,lg.getSize().x,19,19,colors.white,colors.red,"\31")
  97.         lg.fill(lg.getSize().x,lg.getSize().x,5,15,colors.gray)
  98.         local percentage = (offset / 10) * 100
  99.         local rp = math.floor(percentage) / 10
  100.         lg.drawText(lg.getSize().x,5+rp,colors.lightGray,colors.gray,"\8")
  101.         uap.upd()
  102. end
  103. function drawLOGIN()
  104.   term.setBackgroundColor(colors.white)
  105.   term.clear()
  106.   term.setTextColor(colors.red)
  107.   term.setCursorPos(12,3)
  108.   term.write("LOGIN")
  109.   term.setBackgroundColor(colors.red)
  110.   term.setTextColor(colors.white)
  111.   local sx,sy = term.getSize()
  112.   uap.upd()
  113.   for i=1,sx do
  114.     term.setCursorPos(i,6)
  115.     term.write(" ")
  116.   end
  117.   term.setBackgroundColor(colors.gray)
  118.   term.setCursorPos(2,10)
  119.   for i=1,10 do
  120.     term.write(" ")
  121.     term.setCursorPos(2+i,10)
  122.   end
  123.   term.setTextColor(colors.red)
  124.   term.setBackgroundColor(colors.white)
  125.   term.setCursorPos(3,9)
  126.   term.write("CARD-ID")
  127.   term.setBackgroundColor(colors.gray)
  128.   term.setCursorPos(2,14)
  129.   for f=1,10 do
  130.     term.write(" ")
  131.     term.setCursorPos(2+f,14)
  132.   end
  133.   term.setTextColor(colors.red)
  134.   term.setBackgroundColor(colors.white)
  135.   term.setCursorPos(3,13)
  136.   term.write("PASSWORD")
  137.   term.setBackgroundColor(colors.red)
  138.   term.setTextColor(colors.white)
  139.   term.setCursorPos(2,17)
  140.   term.write("BACK")
  141.   term.setCursorPos(10,17)
  142.   term.write("LOGIN")
  143.   writeCreds()
  144.   uap.upd()
  145. end
  146. function drawACC()
  147.   term.setBackgroundColor(colors.white)
  148.   term.clear()
  149.   term.setTextColor(colors.red)
  150.   term.setCursorPos(8,3)
  151.   term.write("Hi, "..name)
  152.   term.setBackgroundColor(colors.red)
  153.   term.setTextColor(colors.white)
  154.   lg.drawBT("perevod",2,15,13,16,colors.white,colors.red,"   Perevod\n   Deneg")
  155.   lg.drawBT("history",19,25,13,16,colors.white,colors.red," Isto\n rija")
  156.   local sx,sy = term.getSize()
  157.   for i=1,sx do
  158.     term.setCursorPos(i,6)
  159.     term.write(" ")
  160.   end
  161.   term.setTextColor(colors.red)
  162.   term.setBackgroundColor(colors.white)
  163.   term.setCursorPos(2,10)
  164.   term.write("- Balance: "..balance.." AR")
  165.   uap.upd()
  166.    
  167. end
  168. -- loop
  169. while true do
  170.   local event, button, x, y = os.pullEvent( "mouse_click" )
  171.   -- LOGIN BT HANDL
  172.   if (screen == 1) then
  173.   if  (y == 8 and x > 11 and x < 18) then
  174.     drawLOGIN()
  175.     screen = 2
  176.   else
  177.   end
  178.   elseif (screen == 2) then
  179.     if (y == 17 and x > 1 and x < 7) then
  180.       drawMAIN()
  181.       screen = 1
  182.     elseif (y == 10 and x > 1 and x < 13) then
  183.       term.setBackgroundColor(colors.lightGray)
  184.       term.setTextColor(colors.white)
  185.       term.setCursorPos(1,10)
  186.       for i=1,10 do
  187.         term.setCursorPos(1+i,10)
  188.         term.write(" ")
  189.       end
  190.       term.setCursorPos(2,10)
  191.       card = read()
  192.       term.setBackgroundColor(colors.gray)
  193.       term.setCursorPos(1,10)
  194.       for i=1,10 do
  195.         term.setCursorPos(1+i,10)
  196.         term.write(" ")
  197.       end
  198.       term.setCursorPos(2,10)
  199.       term.write(card)
  200.     elseif (y == 14 and x > 1 and x < 13) then
  201.       term.setBackgroundColor(colors.lightGray)
  202.       term.setTextColor(colors.white)
  203.       term.setCursorPos(1,14)
  204.       for i=1,10 do
  205.         term.setCursorPos(1+i,14)
  206.         term.write(" ")
  207.       end
  208.       term.setCursorPos(2,14)
  209.       psw = read()
  210.       term.setBackgroundColor(colors.gray)
  211.       term.setCursorPos(1,14)
  212.       for i=1,10 do
  213.         term.setCursorPos(1+i,14)
  214.         term.write(" ")
  215.       end
  216.       term.setCursorPos(2,14)
  217.       term.write(psw)
  218.     elseif (y == 17 and x > 10 and x < 16) then
  219.       rednet.send(40,Base64.encode("login "..card.." "..psw),"bank44")
  220.       term.setBackgroundColor(colors.white)
  221.       term.setTextColor(colors.red)
  222.       term.setCursorPos(10,17)
  223.       term.write("Loading...")
  224.       local sId = nil
  225.       local msg = nil
  226.       local prt = nil
  227.       repeat
  228.         event, senderId, message, distance = os.pullEvent("rednet_message")
  229.         sId = senderId
  230.         msg = Base64.decode(message)
  231.         prt = distance
  232.       until prt ~= "base44" and sId == 40
  233.       local ii = 1
  234.       for word in string.gmatch(msg,"%S+") do
  235.         if (ii == 1) then
  236.           name = word
  237.         elseif  (ii == 2) then
  238.           balance = word
  239.         end
  240.         ii = ii + 1
  241.       end
  242.       if (msg == "error2") then
  243.         term.setCursorPos(10,17)
  244.         term.write("Oshibka!")
  245.         term.setCursorPos(2,18)
  246.         term.write(" -Incorect password")
  247.       elseif (msg == "error1") then
  248.         term.setCursorPos(10,17)
  249.         term.write("Oshibka!")
  250.         term.setCursorPos(2,18)
  251.         term.write(" - No account")
  252.       else
  253.         screen = 3
  254.         saveCreds(card, psw)
  255.         drawACC()
  256.       end
  257.     else
  258.     end
  259.   elseif screen == 3 and lg.isButton(x,y) == "perevod" then
  260.     screen = 4
  261.     lg.fillScreen(colors.white)
  262.     lg.fill(1,lg.getSize().x,3,3,colors.red)
  263.     lg.drawInput("id",2,10,7,7,8)
  264.     lg.drawText(2,6,colors.red,colors.white,"ID karty")
  265.     lg.drawText(2,3,colors.white,colors.red,"Perevod deneg")
  266.     lg.drawText(2,10,colors.red,colors.white,"Summa AR")
  267.     lg.drawText(2,14,colors.red,colors.white,"Comment")
  268.     lg.drawInput("suma",2,10,11,11,8)
  269.     lg.drawInput("comment",2,20,15,15,18)
  270.     lg.drawBT("pay",2,13,17,20,colors.white,colors.red," Perevesti")
  271.     uap.upd()
  272.   elseif screen == 4 and lg.isInput(x,y) then
  273.     if lg.isInput(x,y) == "id" then
  274.       id = lg.getInput(x,y)
  275.     elseif lg.isInput(x,y) == "suma" then
  276.       suma = lg.getInput(x,y,true)
  277.     elseif lg.isInput(x,y) == "comment" then
  278.       comment = lg.getInput(x,y)
  279.     end
  280.   elseif screen == 4 and lg.isButton(x,y) == "pay" then
  281.       if (id ~= card and card ~= nil and id ~= nil) then
  282.       if comment then
  283.         comment = string.gsub(comment, " ", "_")
  284.         rednet.send(40,Base64.encode("send_money "..card.." "..psw.." "..id.." "..suma.." "..comment),"bank44")
  285.       else
  286.         rednet.send(40,Base64.encode("send_money "..card.." "..psw.." "..id.." "..suma),"bank44")
  287.       end
  288.       local sId = nil
  289.       local msg = nil
  290.       local prt = nil
  291.       repeat
  292.         event, senderId, message, distance = os.pullEvent("rednet_message")
  293.         sId = senderId
  294.         msg = Base64.decode(message)
  295.         prt = distance
  296.       until prt ~= "base44" and sId == 40
  297.       lg.fillScreen(colors.red)
  298.       screen = 10
  299.       local answer = nil
  300.       if msg == "error1"  then
  301.          answer = "Takoy karty netu!"
  302.       elseif msg == "error2" then
  303.          answer =  "Nevernyi parol!"
  304.       elseif msg == "error3" then
  305.          answer = "Nedostatochno deneg!"
  306.       elseif msg == "error4" then
  307.          answer = "Takoy karty netu! ("..id..")"
  308.       else
  309.          answer = "Gotovo!"
  310.       end
  311.       lg.drawText(1,lg.getSize().y/2,colors.white,colors.red,answer)
  312.       os.sleep(1)  
  313.       rednet.send(40,Base64.encode("login "..card.." "..psw),"bank44")
  314.       local sId = nil
  315.       local msg = nil
  316.       local prt = nil
  317.       repeat
  318.         event, senderId, message, distance = os.pullEvent("rednet_message")
  319.         sId = senderId
  320.         msg = Base64.decode(message)
  321.         prt = distance
  322.       until prt ~= "base44" and sId == 40
  323.       local ii = 1
  324.       for word in string.gmatch(msg,"%S+") do
  325.         if (ii == 1) then
  326.           name = word
  327.         elseif  (ii == 2) then
  328.           balance = word
  329.         end
  330.         ii = ii + 1
  331.       end
  332.       os.sleep(3)
  333.       screen = 3
  334.       drawACC()
  335.       else
  336.       lg.fillScreen(colors.red)
  337.       screen = 10
  338.       local answer = "Nelzya otpravit sebe!"
  339.       lg.drawText(1,lg.getSize().y/2,colors.white,colors.red,answer)
  340.       os.sleep(1)
  341.       screen = 3
  342.       drawACC()
  343.       end
  344.     elseif screen == 3 and lg.isButton(x,y) == "history" then
  345.         soffset = 0
  346.         drawHistory(soffset)
  347.     elseif screen == 5 and lg.isButton(x,y) == "close1" then
  348.         screen = 3
  349.         drawACC()
  350.     elseif screen == 5 and lg.isButton(x,y) == "down" then
  351.         soffset = soffset + 1
  352.         drawHistory(soffset)
  353.     elseif screen == 5 and lg.isButton(x,y) == "up" then
  354.         if soffset > 0 then
  355.             soffset = soffset - 1
  356.             drawHistory(soffset)
  357.         end
  358.     end    
  359. end
  360. lg.exit()
Add Comment
Please, Sign In to add comment