Advertisement
CelticCoder

bankserver

May 6th, 2024 (edited)
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 25.51 KB | None | 0 0
  1. -- make a clients.txt, "whitelist.txt", log.txt, and "items.txt" file
  2. myusername = "username"
  3. mypassword = "password"
  4.  
  5. function messageWhitelistItems(whitelist, itemlist)
  6.     rednet.open("top")
  7.     computers = getDatabase(whitelist)
  8.     if #computers ~= 0 then
  9.         for _, line in pairs(computers) do
  10.             if tonumber(line) ~= nil then
  11.                 rednet.send(tonumber(line), "itemlist please")
  12.                 rednet.send(tonumber(line), getAllItems(itemlist))
  13.             end
  14.         end
  15.     end
  16. end
  17.  
  18. function displayLog(filename, scrollPosition, maxLines)
  19.     local instruction = "Press Backspace to Leave"
  20.     local database = getDatabase(filename)  -- Retrieve the database using your existing function
  21.     table.insert(database, 1, instruction)
  22.     local startIndex = math.max(1, scrollPosition)
  23.     local endIndex = math.min(#database, scrollPosition + maxLines - 1)
  24.    
  25.     while true do
  26.         term.clear()
  27.         -- Display the instruction
  28.         print(instruction)
  29.  
  30.         -- Display the database content after the instruction
  31.         for i = startIndex, endIndex do
  32.             print(database[i])
  33.         end
  34.        
  35.         local event, key = os.pullEvent("key")
  36.         if key == keys.up then
  37.             scrollPosition = math.max(1, scrollPosition - 1)
  38.         elseif key == keys.down then
  39.             scrollPosition = math.min(#database - maxLines + 1, scrollPosition + 1)
  40.         elseif key == keys.backspace then
  41.             break  -- Exit loop on backspace key press
  42.         end
  43.  
  44.         startIndex = math.max(1, scrollPosition)
  45.         endIndex = math.min(#database, scrollPosition + maxLines - 1)
  46.     end
  47. end
  48.  
  49.  
  50. function dateTime()
  51.     time = os.epoch("local") / 1000
  52.     time_table = os.date("*t", time)
  53.     return os.date("%Y-%m-%d %H:%M:%S", currentTime)
  54. end
  55.  
  56. function log(id, line, success)
  57.     local file = fs.open("log.txt", "a")
  58.     file.writeLine(dateTime() .. " | Computer " .. tostring(id) .. " - " .. line .. " | Success = " .. tostring(success))
  59.     file.close()
  60. end
  61.  
  62. function addItem(item, value, filename, whitelist)
  63.     local file = fs.open(filename, "a") -- Open file in append mode
  64.    
  65.     if not file then
  66.         print("Error: Unable to open file for appending.")
  67.         return
  68.     end
  69.  
  70.     file.writeLine(item .. " " .. value)
  71.     file.close()
  72.     messageWhitelistItems(whitelist, filename)
  73. end
  74.  
  75. function getItem(item, filename)
  76.     -- Open the file for reading
  77.     local file = fs.open(filename, "r")
  78.    
  79.     -- Read and process each line of the file
  80.     local line = file.readLine()
  81.     while line do
  82.         if twoInputStrip(line) == item then
  83.             return line
  84.         end
  85.         line = file.readLine()
  86.     end
  87.     file.close()
  88.     return nil
  89. end
  90.  
  91. function getAllItems(filename)
  92.     -- Open the file for reading
  93.     local file = fs.open(filename, "r")
  94.    
  95.     -- Read and process each line of the file
  96.     local line = file.readLine()
  97.     local itemdatabase = {}
  98.     while line do
  99.         table.insert(itemdatabase, line)
  100.         line = file.readLine()
  101.     end
  102.     file.close()
  103.     return itemdatabase
  104. end
  105.  
  106. function deleteItem(item, filename, whitelist)
  107.     ditem = getItem(item, filename)
  108.     if ditem ~= nil then
  109.         database = getAllItems(filename)
  110.         local file = fs.open(filename, "w")
  111.         for _, line in pairs(database) do
  112.             if line ~= ditem then
  113.                 file.write(line .. "\n")
  114.             end
  115.         end
  116.         file.close()
  117.         messageWhitelistItems(whitelist, filename)
  118.     else
  119.         print(number, " not found in database")
  120.     end
  121. end
  122.  
  123. function addComputer(number, filename)
  124.     local file = fs.open(filename, "a") -- Open file in append mode
  125.    
  126.     if not file then
  127.         print("Error: Unable to open file for appending.")
  128.         return
  129.     end
  130.    
  131.     -- Write the number to the file
  132.     file.writeLine(tostring(number))
  133.     file.close()
  134.    
  135.     print("Computer " .. number .. " added to the whitelist.")
  136. end
  137.  
  138.  
  139. function getComputer(number, filename)
  140.     local file = fs.open(filename, "r")
  141.     local line = file.readLine()
  142.     while line do
  143.         if tonumber(number) == tonumber(line) then
  144.             -- Print the separated components
  145.             file.close()
  146.             return true
  147.         end
  148.         line = file.readLine()
  149.     end
  150.     file.close()
  151.     return false
  152. end
  153.  
  154. function deleteComputer(number, filename)
  155.     if getComputer(number, filename) then
  156.         database = getDatabase(filename)
  157.         local file = fs.open(filename, "w")
  158.         for _, line in pairs(database) do
  159.             if tonumber(line) ~= tonumber(number) then
  160.                 file.write(line .. "\n")
  161.             end
  162.         end
  163.         file.close()
  164.     else
  165.         print(number, " not found in database")
  166.     end
  167. end
  168.  
  169. function stripLine(line)
  170.     username, password, value, address = line:match("([^|]+)|([^|]+)|([^|]+)|([^|]+)")
  171.     return username, password, value, address
  172. end
  173.  
  174. function twoInputStrip(str)
  175.     first, second = str:match("(%S+)%s+(%S+)")
  176.     return first, second
  177. end
  178.  
  179. function threeInputStrip(str)
  180.     first, second, third = str:match("(%S+)%s+(%S+)%s+(%S+)")
  181.     return first, second, third
  182. end
  183.  
  184. function fourInputStrip(str)
  185.     first, second, third, fourth = str:match("(%S+)%s+(%S+)%s+(%S+)%s+(%S+)")
  186.     return first, second, third, fourth
  187. end
  188.  
  189. function fiveInputStrip(str)
  190.     first, second, third, fourth, five = str:match("(%S+)%s+(%S+)%s+(%S+)%s+(%S+)%s+(%S+)")
  191.     return first, second, third, fourth, five
  192. end
  193.  
  194. function searchDatabase(u, filename)
  195.     local file = fs.open(filename, "r")
  196.     local line = file.readLine()
  197.     while line do
  198.         -- Split the line into string and double components
  199.         local username, password, value = stripLine(line)
  200.         if u == username and string.len(u) == string.len(username) then
  201.             file.close()
  202.             return username, password
  203.         end
  204.        
  205.         -- Read the next line
  206.         line = file.readLine()
  207.     end
  208.     file.close()
  209. end
  210.  
  211. function getDatabase(filename)
  212.      -- Open the file for reading
  213.     local file = fs.open(filename, "r")
  214.    
  215.     -- Read and process each line of the file
  216.     local line = file.readLine()
  217.     local database = {}
  218.     while line do
  219.         table.insert(database, line)
  220.         line = file.readLine()
  221.     end
  222.     file.close()
  223.     return database
  224. end
  225.  
  226.  
  227. function getValue(u, filename)
  228.     -- Open the file for reading
  229.     local file = fs.open(filename, "r")
  230.    
  231.     -- Read and process each line of the file
  232.     local line = file.readLine()
  233.     while line do
  234.         -- Split the line into string and double components
  235.         local username, password, value = stripLine(line)
  236.        
  237.         if u == username then
  238.             -- Print the separated components
  239.             file.close()
  240.             return value
  241.         end
  242.        
  243.         -- Read the next line
  244.         line = file.readLine()
  245.     end
  246.     file.close()
  247. end
  248.  
  249. function getAddress(u, filename)
  250.     -- Open the file for reading
  251.     local file = fs.open(filename, "r")
  252.    
  253.     -- Read and process each line of the file
  254.     local line = file.readLine()
  255.     while line do
  256.         -- Split the line into string and double components
  257.         local username, password, value, address = stripLine(line)
  258.        
  259.         if u == username then
  260.             -- Print the separated components
  261.             file.close()
  262.             return address
  263.         end
  264.        
  265.         -- Read the next line
  266.         line = file.readLine()
  267.     end
  268.     file.close()
  269. end
  270.  
  271. function addUser(u, p, v, a, filename)
  272.     -- Open the file for reading
  273.     local file = fs.open(filename, "a")
  274.     if searchDatabase(u, filename) == nil then
  275.         file.write(u .. "|" .. p .. "|" .. v .. "|" .. a .. "\n")
  276.         file.close()
  277.         print("Client Added")
  278.         return true
  279.     else
  280.         print("Client Already in Database")
  281.     end
  282.     file.close()
  283. end
  284.  
  285. function deleteUser(u, filename)
  286.     if searchDatabase(u, filename) ~= nil then
  287.         database = getDatabase(filename)
  288.         local file = fs.open(filename, "w")
  289.         for _, line in pairs(database) do
  290.             username, password, value = stripLine(line)
  291.             if username ~= u then
  292.                 file.write(line .. "\n")
  293.             end
  294.         end
  295.         file.close()
  296.     else
  297.         print(u, " not found in database")
  298.     end
  299. end
  300.  
  301. function changeUsername(u, nu, filename)
  302.     if searchDatabase(u, filename) ~= nil then
  303.         database = getDatabase(filename)
  304.         local file = fs.open(filename, "w")
  305.         for _, line in pairs(database) do
  306.             username, password, value, address = stripLine(line)
  307.             if username ~= u then
  308.                 file.write(line .. "\n")
  309.             else
  310.                 file.write(nu .. "|" .. password .. "|" .. value .. "|" .. address .. "\n")
  311.             end
  312.         end
  313.         file.close()
  314.     else
  315.         print(u, " not found in database")
  316.     end
  317. end
  318.  
  319. function changePassword(u, np, filename)
  320.     if searchDatabase(u, filename) ~= nil then
  321.         database = getDatabase(filename)
  322.         local file = fs.open(filename, "w")
  323.         for _, line in pairs(database) do
  324.             username, password, value = stripLine(line)
  325.             if username ~= u then
  326.                 file.write(line .. "\n")
  327.             else
  328.                 file.write(username .. "|" .. np .. "|" .. value .. "|" .. address .. "\n")
  329.             end
  330.         end
  331.         file.close()
  332.     else
  333.         print(u, " not found in database")
  334.     end
  335. end
  336.  
  337. function changeValue(u, nv, filename)
  338.     if searchDatabase(u, filename) ~= nil then
  339.         database = getDatabase(filename)
  340.         local file = fs.open(filename, "w")
  341.         for _, line in pairs(database) do
  342.             username, password, value = stripLine(line)
  343.             if username ~= u then
  344.                 file.write(line .. "\n")
  345.             else
  346.                 file.write(username .. "|" .. password .. "|" .. nv .. "|" .. address .. "\n")
  347.             end
  348.         end
  349.         file.close()
  350.     end
  351. end
  352.  
  353. function changeAddress(u, na, filename)
  354.     if searchDatabase(u, filename) ~= nil then
  355.         database = getDatabase(filename)
  356.         local file = fs.open(filename, "w")
  357.         for _, line in pairs(database) do
  358.             username, password, value = stripLine(line)
  359.             if username ~= u then
  360.                 file.write(line .. "\n")
  361.             else
  362.                 file.write(username .. "|" .. password .. "|" .. value .. "|" .. na .. "\n")
  363.             end
  364.         end
  365.         file.close()
  366.     end
  367. end
  368.  
  369. local function displayClientMenu()
  370.     print("User Menu")
  371.     print("1. Add user")
  372.     print("2. Delete user")
  373.     print("3. Change username")
  374.     print("4. Change password")
  375.     print("5. Change balance")
  376.     print("6. Change address")
  377.     print("7. Display database")
  378.     print("8. Display user")
  379.     print("0. Exit")
  380. end
  381.  
  382. local function displayWhitelistMenu()
  383.     print("1. Add a Computer")
  384.     print("2. Display Whitelist")
  385.     print("3. Delete Computer")
  386.     print("4. Display Log")
  387.     print("0. Exit")
  388. end
  389.  
  390. local function itemMenu()
  391.     print("1. Add an Item")
  392.     print("2. Display Items")
  393.     print("3. Remove an Item")
  394.     print("0. Exit")
  395. end
  396.  
  397. -- Function to display the menu
  398. local function displayMenu()
  399.     print("User Menu")
  400.     print("1. clientMenu")
  401.     print("2. whitelistMenu")
  402.     print("3. itemMenu")
  403.     print("4. Turn Off Server")
  404.     print("0. Exit")
  405. end
  406.  
  407. -- Main function to handle user input
  408. local function main(filename, whitelist, itemlist)
  409.     while true do
  410.         shell.run("clear")
  411.         displayMenu()
  412.         io.write("Enter your choice: ")
  413.         local gchoice = tonumber(io.read())
  414.         if gchoice == 1 then
  415.             shell.run("clear")
  416.             while true do
  417.                 displayClientMenu()
  418.                 io.write("Enter your choice: ")
  419.                 local choice = tonumber(io.read())
  420.                 if choice == 1 then
  421.                     print("Adding a new user")
  422.                     print("Enter username:")
  423.                     local username = io.read()
  424.                     print("Enter password:")
  425.                     local password = io.read()
  426.                     print("Enter value:")
  427.                     local value = tonumber(io.read())
  428.                     print("Enter address (format: x,y,z):")
  429.                     local address = io.read()
  430.                     -- Add user to the database
  431.                     addUser(username, password, value, address, filename)
  432.                     io.write("Press Anything to Continue: ")
  433.                     io.read()
  434.                     shell.run("clear")
  435.                 elseif choice == 2 then
  436.                     print("Deleting a user")
  437.                     print("Enter username to delete:")
  438.                     local username = io.read()
  439.                     -- Delete user from the database
  440.                     deleteUser(username, filename)
  441.                     io.write("Press Anything to Continue: ")
  442.                     io.read()
  443.                     shell.run("clear")
  444.                 elseif choice == 3 then
  445.                     print("Changing username")
  446.                     print("Enter username to change:")
  447.                     local oldUsername = io.read()
  448.                     print("Enter new username:")
  449.                     local newUsername = io.read()
  450.                     -- Change username in the database
  451.                     changeUsername(oldUsername, newUsername, filename)
  452.                     io.write("Press Anything to Continue: ")
  453.                     io.read()
  454.                     shell.run("clear")
  455.                 elseif choice == 4 then
  456.                     print("Changing password")
  457.                     print("Enter username:")
  458.                     local username = io.read()
  459.                     print("Enter new password:")
  460.                     local newPassword = io.read()
  461.                     -- Change password in the database
  462.                     changePassword(username, newPassword, filename)
  463.                     io.write("Press Anything to Continue: ")
  464.                     io.read()
  465.                     shell.run("clear")
  466.                 elseif choice == 5 then
  467.                     print("Changing balance")
  468.                     print("Enter username:")
  469.                     local username = io.read()
  470.                     print("Enter new value:")
  471.                     local newValue = tonumber(io.read())
  472.                     -- Change value in the database
  473.                     changeValue(username, newValue, filename)
  474.                     io.write("Press Anything to Continue: ")
  475.                     io.read()
  476.                     shell.run("clear")
  477.                 elseif choice == 6 then
  478.                     print("Changing address")
  479.                     print("Enter username:")
  480.                     local username = io.read()
  481.                     print("Enter new address:")
  482.                     local newAddress = io.read()
  483.                     changeAddress(username, newAddress, filename)
  484.                     io.write("Press Anything to Continue: ")
  485.                     io.read()
  486.                     shell.run("clear")
  487.                 elseif choice == 7 then
  488.                     print("Displaying database")
  489.                     -- Display the database
  490.                     database = getDatabase(filename)
  491.                     print("\n")
  492.                     for _, line in pairs(database) do
  493.                         username, password, value, address = stripLine(line)
  494.                         print(username, " ", password, " ", value, " ",  address, "\n")
  495.                     end
  496.                     io.write("Press Anything to Continue: ")
  497.                     io.read()
  498.                     shell.run("clear")
  499.                 elseif choice == 8 then
  500.                     print("Enter username:")
  501.                     local username = io.read()
  502.                     username, password = searchDatabase(username, filename)
  503.                     if username == nil then
  504.                         print("User not Found")
  505.                     else
  506.                         print(username, " ", password, " ", getValue(username, filename), "\n")
  507.                     end
  508.                     io.write("Press Anything to Continue: ")
  509.                     io.read()
  510.                     shell.run("clear")
  511.                 elseif choice == 0 then
  512.                     print("Exiting...")
  513.                     shell.run("clear")
  514.                     break
  515.                 else
  516.                     print("Invalid choice. Please try again.")
  517.                 end
  518.             end
  519.         elseif gchoice == 2 then
  520.             shell.run("clear")
  521.             while true do
  522.                 displayWhitelistMenu()
  523.                 io.write("Enter your choice: ")
  524.                 local choice = tonumber(io.read())
  525.                 if choice == 1 then
  526.                     print("Enter the Computers ID:")
  527.                     local id = io.read()
  528.                     addComputer(id, whitelist)
  529.                     io.write("Press Anything to Continue: ")
  530.                     io.read()
  531.                     shell.run("clear")
  532.                 elseif choice == 2 then
  533.                     print("Displaying database")
  534.                     -- Display the database
  535.                     computers = getDatabase(whitelist)
  536.                     print("\n")
  537.                     for _, line in pairs(computers) do
  538.                         print(line, "\n")
  539.                     end
  540.                     io.write("Press Anything to Continue: ")
  541.                     io.read()
  542.                     shell.run("clear")
  543.                 elseif choice == 3 then
  544.                     print("Enter the Computers ID:")
  545.                     local id = io.read()
  546.                     deleteComputer(id, whitelist)
  547.                     io.write("Press Anything to Continue: ")
  548.                     io.read()
  549.                     shell.run("clear")
  550.                 elseif choice == 4 then
  551.                     shell.run("clear")
  552.                     displayLog("log.txt", 1, 10)
  553.                     shell.run("clear")
  554.                 elseif choice == 0 then
  555.                     print("Exiting...")
  556.                     shell.run("clear")
  557.                     break
  558.                 else
  559.                     print("Invalid choice. Please try again.")
  560.                 end
  561.             end
  562.         elseif gchoice == 3 then
  563.             while true do
  564.                 itemMenu()
  565.                 io.write("Enter your choice: ")
  566.                 local choice = tonumber(io.read())
  567.                 if choice == 1 then
  568.                     print("Adding a new item")
  569.                     print("Enter item minecraft name:")
  570.                     local iname = io.read()
  571.                     print("Enter item value:")
  572.                     local ivalue = io.read()
  573.                     -- Add user to the database
  574.                     addItem(iname, ivalue, itemlist, whitelist)
  575.                     io.write("Press Anything to Continue: ")
  576.                     io.read()
  577.                     shell.run("clear")
  578.                 elseif choice == 2 then
  579.                     print("Displaying items")
  580.                     -- Display the database
  581.                     database = getAllItems(itemlist)
  582.                     print("\n")
  583.                     for _, line in pairs(database) do
  584.                         print(line, "\n")
  585.                     end
  586.                     io.write("Press Anything to Continue: ")
  587.                     io.read()
  588.                     shell.run("clear")
  589.                 elseif choice == 3 then
  590.                     print("Deleting an item")
  591.                     print("Enter item minecraft name:")
  592.                     local iname = io.read()
  593.                     deleteItem(iname, itemlist, whitelist)
  594.                     io.write("Press Anything to Continue: ")
  595.                     io.read()
  596.                     shell.run("clear")
  597.                 elseif choice == 0 then
  598.                     print("Exiting...")
  599.                     shell.run("clear")
  600.                         break
  601.                 else
  602.                     print("Invalid choice. Please try again.")
  603.                 end
  604.             end
  605.         elseif gchoice == 4 then
  606.             return true
  607.         elseif gchoice == 0 then
  608.             print("Exiting...")
  609.             shell.run("clear")
  610.             break
  611.         else
  612.             print("Invalid choice. Please try again.")
  613.         end
  614.     end
  615. end
  616.  
  617. local function serverCoroutine(filename, whitelist, itemlist)
  618.     orders = {}
  619.     while true do
  620.         gsuccess = false
  621.         -- Listen for incoming messages
  622.         local senderId, message = rednet.receive()
  623.         if getComputer(senderId, whitelist) then
  624.             success, command, line = pcall(twoInputStrip, message)
  625.             if success and line ~= nil then
  626.                 if command == "balance" then
  627.                     success, command, nusername, npassword, balancechange = pcall(fourInputStrip, message)
  628.                     if success and nusername ~= nil and npassword ~= nil and balancechange ~= nil then
  629.                         dusername, dpassword = searchDatabase(nusername, filename)
  630.                         if tostring(dusername) ~= nil and tostring(dpassword) ~= nil then
  631.                             if npassword == dpassword then
  632.                                 nv = tonumber(getValue(nusername, filename)) + tonumber(balancechange)
  633.                                 changeValue(nusername, nv, filename)
  634.                                 rednet.send(senderId, getValue(nusername, filename))
  635.                                 gsuccess = true
  636.                             end
  637.                         end
  638.                     end
  639.                 elseif command == "address" then
  640.                     success, command, nusername, npassword, balancechange = pcall(fourInputStrip, message)
  641.                     if success and nusername ~= nil then
  642.                         dusername, dpassword = searchDatabase(nusername, filename)
  643.                         daddress = getAddress(dusername, filename)
  644.                         if tostring(dusername) ~= nil and daddress ~= nil then
  645.                             rednet.send(senderId, daddress)
  646.                             gsuccess = true
  647.                         end
  648.                     end
  649.                 end
  650.             end
  651.         end
  652.         success, command, line = pcall(twoInputStrip, message)
  653.         if success and line ~= nil then
  654.             if command == "buy" then
  655.                 success, command, nusername, npassword, balancechange = pcall(fourInputStrip, message)
  656.                 if success and nusername ~= nil and npassword ~= nil and balancechange ~= nil then
  657.                     dusername, dpassword = searchDatabase(nusername, filename)
  658.                     if tostring(dusername) ~= nil and tostring(dpassword) ~= nil then
  659.                         if npassword == dpassword then
  660.                             if tonumber(balancechange) >= 0 and tonumber(getValue(nusername, filename)) >= tonumber(balancechange) then
  661.                                 nv = tonumber(getValue(nusername, filename)) - tonumber(balancechange)
  662.                                 changeValue(nusername, nv, filename)
  663.                                 rednet.send(senderId, getValue(nusername, filename))
  664.                                 gsuccess = true
  665.                                 if orders ~= nil then
  666.                                     for i, order in ipairs(orders) do
  667.                                         print(order)
  668.                                         print(tonumber(order[2]) == tonumber(balancechange))
  669.                                         print(tonumber(order[3]) == tonumber(id))
  670.                                         print(tonumber(order[3]))
  671.                                         print(tonumber(senderId))
  672.                                         if tonumber(order[2]) == tonumber(balancechange) and tonumber(order[3]) == tonumber(senderId) then
  673.                                             cashierId = tonumber(order[1])
  674.                                             print(cashierId)
  675.                                             rednet.send(cashierId, "true")
  676.                                             table.remove(orders, i)
  677.                                             break
  678.                                         end
  679.                                     end
  680.                                 end
  681.                             end
  682.                         end
  683.                     end
  684.                 end
  685.             elseif command == "search" then
  686.                 success, command, nusername, npassword = pcall(threeInputStrip, message)
  687.                 if success and nusername ~= nil and npassword ~= nil then
  688.                     dusername, dpassword = searchDatabase(nusername, filename)
  689.                     if tostring(dusername) ~= nil and tostring(dpassword) ~= nil then
  690.                         if npassword == dpassword then
  691.                             rednet.send(senderId, getValue(nusername, filename))
  692.                             gsuccess = true
  693.                         end
  694.                     end
  695.                 end
  696.             elseif command == "transfer" then
  697.                 success, command, nusername, npassword, balancechange, nusername2 = pcall(fiveInputStrip, message)
  698.                 if success and nusername ~= nil and npassword ~= nil and balancechange ~= nil and nusername2 ~= nil and nusername ~= nusername2 then
  699.                     dusername, dpassword = searchDatabase(nusername, filename)
  700.                     nusername2 = searchDatabase(nusername2, filename)
  701.                     if tostring(dusername) ~= nil and tostring(dpassword) ~= nil then
  702.                         if npassword == dpassword then
  703.                             if nusername2 ~= nil then
  704.                                 if tonumber(balancechange) > 0 and tonumber(balancechange) <= tonumber(getValue(nusername, filename)) then
  705.                                     nv = tonumber(getValue(nusername, filename) - tonumber(balancechange))
  706.                                     nv2 = tonumber(getValue(nusername2, filename) + tonumber(balancechange))
  707.                                     changeValue(nusername, nv, filename)
  708.                                     changeValue(nusername2, nv2, filename)
  709.                                     rednet.send(senderId, tonumber(getValue(nusername, filename)))
  710.                                     gsuccess = true
  711.                                 end
  712.                             end
  713.                         end
  714.                     end
  715.                 end
  716.             elseif command == "items" then
  717.                 rednet.send(senderId, getAllItems(itemlist))
  718.                 gsuccess = true
  719.             elseif command == "serverbuyrequest" then
  720.                 command, balance, phoneID = threeInputStrip(message)
  721.                 if balance ~= nil and phoneID ~= nil then
  722.                     table.insert(orders, {senderId, balance, phoneID})
  723.                     gsuccess = true
  724.                 end
  725.             elseif command == "removebuyrequest" then
  726.                 command, balance, phoneID = threeInputStrip(message)
  727.                 if orders ~= nil then
  728.                     for i, order in ipairs(orders) do
  729.                         if tonumber(id) == tonumber(order[1]) and tonumber(balance) == tonumber(order[2]) and tonumber(phoneID) == tonumber(order[3]) then
  730.                             table.remove(orders, i)
  731.                             gsuccess = true
  732.                         end
  733.                     end
  734.                 end
  735.             end
  736.         log(senderId, message, gsuccess)
  737.         if gsuccess == false then
  738.             rednet.send(senderId, "false")
  739.         end
  740.         end
  741.     end
  742. end
  743.  
  744. -- Main coroutine for the login screen
  745. local function loginCoroutine(filename, whitelist, itemlist)
  746.     while true do
  747.         -- Display login screen
  748.         print("Login Screen")
  749.         print("Enter username:")
  750.         local username = read()
  751.         print("Enter password:")
  752.         local password = read("*")
  753.  
  754.         -- If login is successful, unlock the screen
  755.         if username == myusername and password == mypassword then
  756.             print("Login successful")
  757.             if main(filename, whitelist, itemlist) then
  758.                 break
  759.             end
  760.             shell.run("clear")
  761.         else
  762.             print("Login failed")
  763.         end
  764.     end
  765. end
  766.  
  767. os.pullEvent = os.pullEventRaw
  768. whitelist = "whitelist.txt"
  769. filename = "clients.txt"
  770. itemlist = "items.txt"
  771. if fs.exists(filename) then
  772.     rednet.open("top")
  773.     parallel.waitForAny(
  774.         function() loginCoroutine(filename, whitelist, itemlist) end,
  775.         function() serverCoroutine(filename, whitelist, itemlist) end
  776.     )
  777. else
  778.     print("No File to Protect")
  779. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement