Advertisement
Doob

market2

Feb 3rd, 2016
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 18.57 KB | None | 0 0
  1. --https://pastebin.com/buavY589
  2. --wget "https://raw.githubusercontent.com/Krutoy242/Gopher-Programs/Packed/gml/lib/gml_full.lua" gml.lua
  3. package.loaded.gml=nil
  4. package.loaded.gfxbuffer=nil
  5. local gml = require('gml')
  6. local event = require('event')
  7. local unicode = require('unicode')
  8. local computer = require('computer')
  9. local component = require('component')
  10. local serialization = require('serialization')
  11. local interface = component.me_interface
  12. local chest = component.chest
  13. local modem = component.modem
  14. local gpu = component.gpu
  15. local SIDE = 'UP'
  16. local BUFFER, uiBuffer, itemsNet, uiitemsNet = {}, {}, {}, {}
  17. local Multiplier = 1000000 -- множитель реальной стоимости, необходим для целочисленного отображения цены
  18. local Step = 1 -- шаг сделки, количество пунктов, на которые текущая цена должна приблизиться к реальной
  19. local Set = 0.005 -- процент с продаж
  20. local Operator = 'Doob' -- оператор системы
  21. local maxlog = 30
  22. local db = {
  23.   last = {},
  24.   users = {},
  25.   wlist = {
  26.     ['minecraft:diamond|0'] = true,
  27.     ['minecraft:redstone|0'] = true,
  28.     ['minecraft:iron_ingot|0'] = true,
  29.     ['minecraft:gold_ingot|0'] = true,
  30.     ['minecraft:coal|0'] = true,
  31.     ['minecraft:emerald|0'] = true,
  32.     ['minecraft:nether_star|0'] = true,
  33.     ['minecraft:glowstone_dust|0'] = true,
  34.     ['minecraft:dye|4'] = true,
  35.     ['IC2:itemRubber|0'] = true,
  36.     ['IC2:blockOreUran|0'] = true,
  37.     ['IC2:itemOreIridium|0'] = true
  38.   },
  39.   items = {
  40.     ['minecraft:diamond|0']={label='Алмаз',cost=1,o=0,i=0},
  41.     ['minecraft:redstone|0']={label='Редстоун',cost=1,o=0,i=0},
  42.     ['minecraft:iron_ingot|0']={label='Железный слиток',cost=1,o=0,i=0},
  43.     ['minecraft:gold_ingot|0'] = {label='Золотой слиток',cost=1,o=0,i=0},
  44.     ['minecraft:coal|0']={label='Уголь',cost=1,o=0,i=0},
  45.     ['minecraft:emerald|0']={label='Изумруд',cost=1,o=0,i=0},
  46.     ['minecraft:nether_star|0']={label='Звезда ада',cost=1,o=0,i=0},
  47.     ['minecraft:glowstone_dust|0']={label='Светопыль',cost=1,o=0,i=0},
  48.     ['minecraft:dye|4']={label='Лазурит',cost=1,o=0,i=0},
  49.     ['IC2:itemRubber|0']={label='Резина',cost=1,o=0,i=0},
  50.     ['IC2:blockOreUran|0']={label='Урановая руда',cost=1,o=0,i=0},
  51.     ['IC2:itemOreIridium|0']={label='Иридиевая руда',cost=1,o=0,i=0}
  52.   }
  53. }
  54. gpu.setResolution(46, 15)
  55. local CURRENT_USER, BALANCE_TEXT, lastlogin
  56. local nc = {x = 14, y = 4}
  57. local buy_cost = 0
  58. local size = 0
  59. local sell_total = 0
  60. local sell_items = {}
  61. local dbname = 'market.db'
  62.  
  63. local function savedb()
  64.   local file = io.open(dbname, 'w')
  65.   file:write(serialization.serialize(db))
  66.   file:close()
  67. end
  68.  
  69. local function loaddb()
  70.   local file = io.open(dbname, 'r')
  71.   if not file then
  72.     file = io.open(dbname, 'w')
  73.     file:write(serialization.serialize(db))
  74.   else
  75.     local serdb = file:read('a')
  76.     db = serialization.unserialize(serdb)
  77.   end
  78.   file:close()
  79. end
  80.  
  81. local function addlog(str)
  82.   local file = io.open('market.log', 'a')
  83.   file:write(str..'\n')
  84.   file:close()
  85. end
  86.  
  87. local function bb()
  88.   BALANCE_TEXT = CURRENT_USER..': '..db.users[CURRENT_USER]
  89. end
  90.  
  91. local function addspace(str, n)
  92.   if n-1 < unicode.len(str) then
  93.     return unicode.sub(str, 1, n)
  94.   else
  95.     for i = 1, n-unicode.len(str) do
  96.       str = str..' '
  97.     end
  98.     return str
  99.   end
  100. end
  101.  
  102. local function getFingerprint(item) -- modname:itemname|meta
  103.   local items = interface.getAvailableItems()
  104.   for i = 1, #items do
  105.     if items[i].fingerprint.id..'|'..items[i].fingerprint.dmg == item then
  106.       return items[i].fingerprint
  107.     end
  108.   end
  109. end
  110.  
  111. local function toBuffer(item, amount)
  112.   local fp = getFingerprint(item)
  113.   if fp then
  114.     return interface.exportItem(fp, SIDE, amount).size
  115.   end
  116. end
  117.  
  118. local function toNet(item, amount)
  119.   local counter = 0
  120.   for s = 1, chest.getInventorySize() do
  121.     local fitem = chest.getStackInSlot(s)
  122.     if fitem then
  123.       if item == fitem.id..'|'..fitem.dmg then
  124.         if fitem.qty < amount then
  125.           interface.pullItemIntoSlot(SIDE, s, fitem.qty)
  126.           amount, counter = amount - fitem.qty, counter+fitem.qty
  127.         elseif fitem.qty >= amount then
  128.           interface.pullItemIntoSlot(SIDE, s, amount)
  129.           amount, counter = 0, counter+amount
  130.           break
  131.         end
  132.       end
  133.     end
  134.   end
  135.   return counter
  136. end
  137.  
  138. local function scanBuffer()
  139.   BUFFER, uiBuffer = {}, {}
  140.   for s = 1, chest.getInventorySize() do
  141.     local item = chest.getStackInSlot(s)
  142.     if item then
  143.       local name = item.id..'|'..item.dmg
  144.       if db.wlist[name] then
  145.         if not db.items[name] then
  146.           db.items[name] = {label=item.display_name,cost=1,o=0,i=0}
  147.         end
  148.         if not BUFFER[name] then
  149.           BUFFER[name] = item.qty
  150.         else
  151.           BUFFER[name] = BUFFER[name] + item.qty
  152.         end
  153.       end
  154.     end
  155.   end
  156.   uiBuffer[0] = {}
  157.   for i, j in pairs(BUFFER) do
  158.     if db.wlist[i] and db.items[i] then
  159.       local txt = db.items[i].label
  160.       txt = addspace(txt, 17)
  161.       txt = txt..j
  162.       txt = addspace(txt, 29)
  163.       txt = txt..db.items[i].cost*j
  164.       table.insert(uiBuffer, txt)
  165.       uiBuffer[0][txt] = i
  166.     end
  167.   end
  168. end
  169.  
  170. local function scanNet()
  171.   local tbl = interface.getItemsInNetwork()
  172.   itemsNet, uiitemsNet = {}, {}
  173.   for i = 1, #tbl do
  174.     local item = tbl[i].name..'|'..tbl[i].damage
  175.     if db.wlist[item] then
  176.       if itemsNet[item] then
  177.         itemsNet[item] = itemsNet[item]+tbl[i].size
  178.       else
  179.         itemsNet[item] = tbl[i].size
  180.       end
  181.     end
  182.   end
  183.   uiitemsNet[0] = {}
  184.   for i, j in pairs(itemsNet) do
  185.     if db.wlist[i] and db.items[i] then
  186.       local txt = db.items[i].label
  187.       txt = addspace(txt, 17)
  188.       txt = txt..j
  189.       txt = addspace(txt, 29)
  190.       txt = txt..db.items[i].cost
  191.       table.insert(uiitemsNet, txt)
  192.       uiitemsNet[0][txt] = i
  193.     end
  194.   end
  195. end
  196.  
  197. local function getRealCost(item) -- рассчет реальной стоимости
  198.   local real_cost = math.ceil(((db.items[item].o/(db.items[item].i-db.items[item].o))/db.items[item].i)*Multiplier)
  199.   if real_cost <= 1 then
  200.     real_cost = 1
  201.   --elseif real_cost == math.huge then
  202.   --  real_cost = Multiplier
  203.   end
  204.   return real_cost
  205. end
  206.  
  207. local function setNewCurrentCost(item) -- установка новой текущей стоимости
  208.   --db.items[item].cost = getRealCost(item)
  209.   local cost = getRealCost(item)
  210.   if cost > db.items[item].cost then
  211.     db.items[item].cost = db.items[item].cost + Step
  212.   elseif cost < db.items[item].cost then
  213.     db.items[item].cost = db.items[item].cost - Step
  214.   end
  215.   if db.items[item].cost < 1 then
  216.     db.items[item].cost = 1
  217.   end
  218. end
  219.  
  220. local function transfer(target, amount)
  221.   if db.users[CURRENT_USER] and db.users[CURRENT_USER] >= amount then
  222.     if not db.users[CURRENT_USER] then db.users[CURRENT_USER] = 0 end
  223.     if not db.users[target] then db.users[target] = 0 end
  224.     db.users[CURRENT_USER] = db.users[CURRENT_USER] - amount
  225.     db.users[target] = db.users[target] + amount
  226.     addlog(os.time()..'@'..CURRENT_USER..'@'..db.users[CURRENT_USER]..'@T@'..target..'@'..db.users[target]..'@'..amount)
  227.     savedb()
  228.   end
  229. end
  230.  
  231. local function buy(titems) -- покупка предметов у пользователя
  232.   local summ = 0
  233.   for item, amount in pairs(titems) do
  234.     toNet(item, amount)
  235.     if db.wlist[item] then
  236.       db.items[item].i = db.items[item].i + amount
  237.       db.users[CURRENT_USER] = db.users[CURRENT_USER] + (db.items[item].cost * amount)
  238.       summ = summ + (db.items[item].cost * amount)
  239.       setNewCurrentCost(item)
  240.       addlog(os.time()..'@'..CURRENT_USER..'@'..db.users[CURRENT_USER]..'@>@'..item..'@'..amount..'@'..db.items[item].i-db.items[item].o..'@'..db.items[item].cost)
  241.     end
  242.   end
  243.   if CURRENT_USER ~= Operator and summ > 1 then
  244.     transfer(Operator, math.ceil(summ*Set))
  245.   end
  246.   savedb()
  247.   bb()
  248. end
  249.  
  250. local function sell(item, amount) -- продажа предметов пользователю
  251.   local total = db.items[item].cost * amount
  252.   if db.wlist[item] and db.users[CURRENT_USER] >= total then
  253.     toBuffer(item, amount)
  254.     db.items[item].o = db.items[item].o + amount
  255.     db.users[CURRENT_USER] = db.users[CURRENT_USER] - total
  256.     setNewCurrentCost(item)
  257.     addlog(os.time()..'@'..CURRENT_USER..'@'..db.users[CURRENT_USER]..'@<@'..item..'@'..amount..'@'..db.items[item].i-db.items[item].o..'@'..db.items[item].cost)
  258.     savedb()
  259.   end
  260.   bb()
  261. end
  262.  
  263. local function logout()
  264.   modem.broadcast(1, 2)
  265.   computer.removeUser(CURRENT_USER)
  266.   CURRENT_USER = nil
  267. end
  268.  
  269. local function relogin()
  270.   if os.time()-db.last[CURRENT_USER].login < 259200 then
  271.     if db.last[CURRENT_USER].count <= maxlog then
  272.       db.last[CURRENT_USER].count = db.last[CURRENT_USER].count + 1
  273.     end
  274.   else
  275.     db.last[CURRENT_USER].count = 1
  276.     db.last[CURRENT_USER].login = os.time()
  277.   end
  278. end
  279.  
  280. local main_menu = gml.create(1, 1, 46, 15)
  281. local wallet_menu = gml.create(1, 1, 46, 15)
  282. local sell_menu = gml.create(1, 1, 46, 15)
  283. local buy_menu = gml.create(1, 1, 46, 15)
  284. local info_dialog = gml.create(1, 1, 46, 15)
  285. local buy_dialog = gml.create(1, 1, 46, 15)
  286. local sell_confirm_dialog = gml.create(1, 1, 46, 15)
  287.  
  288. main_menu.style = gml.loadStyle('style')
  289. sell_menu.style = main_menu.style
  290. buy_menu.style = main_menu.style
  291. wallet_menu.style = main_menu.style
  292. info_dialog.style = main_menu.style
  293. buy_dialog.style = main_menu.style
  294. sell_confirm_dialog.style = main_menu.style
  295.  
  296. --------------------------------------BALANCE
  297. local lbl_bal = wallet_menu:addLabel(1, 3, 1, 1)
  298. local lbl2_bal = wallet_menu:addLabel(1, 5, 1, 1)
  299. local lbl3_bal = wallet_menu:addLabel(1, 7, 1, 1)
  300. local btn_exit_bal = wallet_menu:addButton('center', 10, 20, 3, 'Выход', function()
  301.   logout()
  302.   wallet_menu.close()
  303. end)
  304. local function balance()
  305.   bb()
  306.   lbl_bal.text = BALANCE_TEXT
  307.   lbl_bal.width = #BALANCE_TEXT
  308.   lbl_bal.posX = math.floor((45-lbl_bal.width)/2)
  309.   local txt = 'Доступно операций: '.. maxlog-db.last[CURRENT_USER].count
  310.   lbl2_bal.text = txt
  311.   lbl2_bal.width = unicode.len(txt)
  312.   lbl2_bal.posX = math.floor((45-lbl2_bal.width)/2)
  313.   txt = 'Сброс через '..60-math.ceil((os.time()-db.last[CURRENT_USER].login)/4320)..' минут'
  314.   lbl3_bal.text = txt
  315.   lbl3_bal.width = unicode.len(txt)
  316.   lbl3_bal.posX = math.floor((45-lbl3_bal.width)/2)
  317.   wallet_menu:run()
  318. end
  319. --------------------------------------SELL CONFIRM
  320. sell_confirm_dialog:addLabel(14, 1, 17, 'Продать предметы?')
  321. local sc_kol = sell_confirm_dialog:addLabel(1, 4, 12, 0)
  322. local sc_sum = sell_confirm_dialog:addLabel(1, 6, 10, 0)
  323. sell_confirm_dialog:addButton('left', 11, 13, 3, 'Отмена', function()
  324.   sell_total = 0
  325.   logout()
  326.   sell_menu.close()
  327.   info_dialog.close()
  328.   sell_confirm_dialog.close()
  329. end)
  330. sell_confirm_dialog:addButton('right', 11, 13, 3, 'Подтвердить', function()
  331.   relogin()
  332.   buy(sell_items)
  333.   logout()
  334.   sell_menu.close()
  335.   info_dialog.close()
  336.   sell_confirm_dialog.close()
  337. end)
  338. --------------------------------------SELL
  339. local lbsell = sell_menu:addListBox('center', 3, 44, 9, {})
  340. local sell_money = sell_menu:addLabel(1, 1, 1, 1)
  341. local sell_colums = sell_menu:addLabel(1, 2, 36, 'Наименование     Количество  Сумма')
  342. local sell_exit = sell_menu:addButton('left', 15, 13, 1, 'Отмена', function()
  343.   logout()
  344.   sell_menu.close()
  345.   info_dialog.close()
  346. end)
  347. local sell_all = sell_menu:addButton(16, 15, 14, 1, 'Продать все', function()
  348.   if #uiBuffer > 0 then
  349.     local asize, amon = 0, 0
  350.     sell_items = {}
  351.     for k, v in pairs(BUFFER) do
  352.       asize = asize + v
  353.       amon = amon + (v*db.items[k].cost)
  354.     end
  355.     sc_kol.text = 'Количество: '..asize
  356.     amon = amon-math.ceil(amon*Set)
  357.     if amon == 0 then amon = 1 end
  358.     sell_total = amon
  359.     sc_sum.text = 'На сумму: '..amon..' (комиссия '..Set*100 ..'%)'
  360.     sc_kol.width = unicode.len(sc_kol.text)
  361.     sc_kol.posX = math.floor((46-sc_kol.width)/2)
  362.     sc_sum.width = unicode.len(sc_sum.text)
  363.     sc_sum.posX = math.floor((46-sc_sum.width)/2)
  364.     sell_total = amon
  365.     for i, j in pairs(BUFFER) do
  366.       sell_items[i] = BUFFER[i]
  367.     end
  368.     sell_confirm_dialog:run()
  369.   end
  370. end)
  371. local sell_one = sell_menu:addButton('right', 15, 13, 1, 'Продать', function()
  372.   if #uiBuffer > 0 then
  373.     sell_items = {}
  374.     local item = uiBuffer[0][lbsell:getSelected()]
  375.     sc_kol.text = 'Количество: '..BUFFER[item]
  376.     local amon = BUFFER[item]*db.items[item].cost
  377.     amon = amon-math.ceil(amon*Set)
  378.     if amon == 0 then amon = 1 end
  379.     sell_total = amon
  380.     sc_sum.text = 'На сумму: '..amon..' (комиссия '..Set*100 ..'%)'
  381.     sc_kol.width = unicode.len(sc_kol.text)
  382.     sc_kol.posX = math.floor((46-sc_kol.width)/2)
  383.     sc_sum.width = unicode.len(sc_sum.text)
  384.     sc_sum.posX = math.floor((46-sc_sum.width)/2)
  385.     sell_items[item] = BUFFER[item]
  386.     sell_confirm_dialog:run()
  387.   end
  388. end)
  389. --------------------------------------SELL INFO
  390. local lbl_inf = info_dialog:addLabel(6, 5, 34, 'Кинь предметы для продажи роботу')
  391. local btn_cncl_inf = info_dialog:addButton(6, 8, 13, 3, 'Отмена', function()
  392.   logout()
  393.   info_dialog.close()
  394. end)
  395. local btn_nxt_inf = info_dialog:addButton(26, 8, 13, 3, 'Далее', function()
  396.   modem.broadcast(1, 0)
  397.   scanBuffer()
  398.   lbsell:updateList(uiBuffer)
  399.   bb()
  400.   sell_money.text = BALANCE_TEXT
  401.   sell_money.width = #BALANCE_TEXT
  402.   sell_money.posX = math.floor((45/2)-(sell_money.width/2))
  403.   sell_menu:run()
  404. end)
  405. --------------------------------------
  406. local itemname = buy_dialog:addLabel(1, 1, 22, '')
  407. local itemcost = buy_dialog:addLabel(1, 1, 8, '')
  408. local kol = buy_dialog:addLabel(1, 1+nc.y, 12, 'Количество: ')
  409. local sum = buy_dialog:addLabel(1, nc.y-1, 7, 'Сумма: ')
  410. local amou = buy_dialog:addLabel(1+nc.x, 1+nc.y, 30, 0)
  411. local totalcoin = buy_dialog:addLabel(1+nc.x, nc.y-1, 30, 0)
  412. --------------------------------------BUY
  413. local buy_list = buy_menu:addListBox('center', 3, 44, 9, {})
  414. local buy_money = buy_menu:addLabel(1, 1, 1, 1)
  415. local buy_colums = buy_menu:addLabel(1, 2, 36, 'Наименование     Количество  Цена')
  416. local buy_exit = buy_menu:addButton(1, 15, 13, 1, 'Отмена', function()
  417.   logout()
  418.   buy_menu:hide()
  419.   buy_menu.close()
  420. end)
  421. local buy_c = buy_menu:addButton(32, 15, 13, 1, 'Далее', function()
  422.   if #uiitemsNet > 0 then
  423.     local item_label = db.items[uiitemsNet[0][buy_list:getSelected()]].label
  424.     buy_cost = tostring(db.items[uiitemsNet[0][buy_list:getSelected()]].cost)
  425.     itemname.width = unicode.len(item_label)+14
  426.     itemname.text = 'Наименование: '..item_label
  427.     itemcost.width = #buy_cost+6
  428.     itemcost.posX = 45-itemcost.width
  429.     itemcost.text = 'Цена: '..buy_cost
  430.     amou.text = 0
  431.     totalcoin.text = 0
  432.     buy_dialog:run()
  433.   end
  434. end)
  435. --------------------------------------
  436. local function rebuild(n)
  437.   if size == 0 then
  438.     size = n
  439.   else
  440.     size = size*10+n
  441.   end
  442.   if size*buy_cost > db.users[CURRENT_USER] then -- ограничение количества по балансу
  443.     size = math.floor(db.users[CURRENT_USER]/buy_cost)
  444.   end
  445.   local item = db.items[uiitemsNet[0][buy_list:getSelected()]]
  446.   if size > item.i-item.o then -- ограничение максимального количества по рассчитанному
  447.     size = item.i-item.o
  448.   end
  449.   amou.text = size
  450.   totalcoin.text = size*buy_cost
  451.   amou:draw()
  452.   totalcoin:draw()
  453. end
  454. local num1 = buy_dialog:addButton(1+nc.x, 3+nc.y, 3, 1, '1',function()rebuild(1)end)
  455. local num2 = buy_dialog:addButton(6+nc.x, 3+nc.y, 3, 1, '2',function()rebuild(2)end)
  456. local num3 = buy_dialog:addButton(11+nc.x, 3+nc.y, 3, 1, '3',function()rebuild(3)end)
  457. local num4 = buy_dialog:addButton(1+nc.x, 5+nc.y, 3, 1, '4',function()rebuild(4)end)
  458. local num5 = buy_dialog:addButton(6+nc.x, 5+nc.y, 3, 1, '5',function()rebuild(5)end)
  459. local num6 = buy_dialog:addButton(11+nc.x, 5+nc.y, 3, 1, '6',function()rebuild(6)end)
  460. local num7 = buy_dialog:addButton(1+nc.x, 7+nc.y, 3, 1, '7',function()rebuild(7)end)
  461. local num8 = buy_dialog:addButton(6+nc.x, 7+nc.y, 3, 1, '8',function()rebuild(8)end)
  462. local num9 = buy_dialog:addButton(11+nc.x, 7+nc.y, 3, 1, '9',function()rebuild(9)end)
  463. local num0 = buy_dialog:addButton(6+nc.x, 9+nc.y, 3, 1, '0',function()rebuild(0)end)
  464. local numok = buy_dialog:addButton(11+nc.x, 9+nc.y, 3, 1, 'ok',function()
  465.   local item = uiitemsNet[0][buy_list:getSelected()]
  466.   sell(item, size)
  467.   relogin()
  468.   logout()
  469.   buy_dialog.close()
  470.   buy_menu:hide()
  471.   buy_menu.close()
  472. end)
  473. local numD = buy_dialog:addButton(1+nc.x, 9+nc.y, 3, 1, '<',function()
  474.   if size == 0 then
  475.     buy_dialog.close()
  476.   elseif #tostring(size) == 1 and size ~= 0 then
  477.     size = 0
  478.   elseif #tostring(size) > 1 then
  479.     size = (size-math.fmod(size, 10))/10
  480.   end
  481.   amou.text = size
  482.   totalcoin.text = size*buy_cost
  483.   amou:draw()
  484.   totalcoin:draw()
  485. end)
  486. --------------------------------------MAIN
  487. local button_buy = main_menu:addButton('center', 2, 20, 3, 'Продать', function()
  488.   if db.last[CURRENT_USER].count < maxlog then
  489.     modem.broadcast(1, 1)
  490.     info_dialog:run()
  491.   end
  492. end)
  493. local button_sell = main_menu:addButton('center', 6, 20, 3, 'Купить', function()
  494.   if db.last[CURRENT_USER].count < maxlog then
  495.     scanNet()
  496.     buy_list:updateList(uiitemsNet)
  497.     bb()
  498.     buy_money.text = BALANCE_TEXT
  499.     buy_money.width = #BALANCE_TEXT
  500.     buy_money.posX = math.floor((45/2)-(buy_money.width/2))
  501.     buy_menu:run()
  502.   end
  503. end)
  504. local button_bal = main_menu:addButton('center', 10, 20, 3, 'Информация', balance)
  505.  
  506. main_menu:addHandler('touch', function(...)
  507.   local e = {...}
  508.   CURRENT_USER = e[6]
  509.   lastlogin = computer.uptime()
  510.   computer.addUser(CURRENT_USER)
  511.   if not db.users[CURRENT_USER] then
  512.     db.users[CURRENT_USER] = 0
  513.   end
  514.   if not db.last[CURRENT_USER] then
  515.     db.last[CURRENT_USER] = {login = os.time(), count = 0}
  516.   end
  517.   if os.time()-db.last[CURRENT_USER].login > 259200 then
  518.     db.last[CURRENT_USER].login = os.time()
  519.     db.last[CURRENT_USER].count = 0
  520.   end
  521.   bb()
  522. end)
  523.  
  524. _G.m_timer = event.timer(60, function()
  525.   if CURRENT_USER and computer.uptime()-lastlogin >= 120 then
  526.     logout()
  527.     sell_menu.close()
  528.     buy_menu.close()
  529.     wallet_menu.close()
  530.     info_dialog.close()
  531.     buy_dialog.close()
  532.     sell_confirm_dialog.close()
  533.   end
  534. end, math.huge)
  535.  
  536. os.execute('cls')
  537. loaddb()
  538. main_menu:run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement