Stawlie0

Untitled

Oct 21st, 2023
877
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.67 KB | None | 0 0
  1. local serialization = require("serialization")
  2. local filesystem = require("filesystem")
  3. local component = require("component")
  4. local chatbox = component.chat_box
  5. local radar = component.os_entdetector
  6.  
  7. local Logger = {}
  8.  
  9. Logger.logs = {}
  10. Logger.filename = "/home/logfile.log"
  11.  
  12. function Logger:scanPlayers()
  13.     local players = radar.scanPlayers()
  14.     local result = {}
  15.  
  16.     for i, player in ipairs(players) do
  17.         table.insert(result, {name = player.name, range = player.distance or math.huge})  -- Если distance nil, используем очень большое значение
  18.     end
  19.  
  20.     -- Сортировка игроков по дистанции
  21.     table.sort(result, function(a, b)
  22.         if a.range and b.range then
  23.             return a.range > b.range
  24.         end
  25.         return false  -- Если одно из значений nil, не пытаемся их сортировать
  26.     end)
  27.  
  28.     return result
  29. end
  30.  
  31. function Logger:getHostTime(timezone)
  32.     timezone = timezone or 2
  33.     local file = io.open("/HostTime.tmp", "w")
  34.     file:write("")
  35.     file:close()
  36.     local timeCorrection = timezone * 3600
  37.     local lastModified = tonumber(string.sub(filesystem.lastModified("/HostTime.tmp"), 1, -4)) + timeCorrection
  38.     filesystem.remove("/HostTime.tmp")
  39.     local year, month, day, hour, minute, second = os.date("%Y", lastModified), os.date("%m", lastModified), os.date("%d", lastModified), os.date("%H", lastModified), os.date("%M", lastModified), os.date("%S", lastModified)
  40.     return tonumber(day), tonumber(month), tonumber(year), tonumber(hour), tonumber(minute), tonumber(second)
  41. end
  42.  
  43. function Logger:real_time()
  44.     local time = {self:getHostTime(1)}
  45.     local text = string.format("%02d:%02d:%04d %02d:%02d:%02d", time[1], time[2], time[3], time[4], time[5], time[6])
  46.     return text
  47. end
  48.  
  49. function Logger:loadLogs()
  50.     if filesystem.exists(self.filename) then
  51.         local file = io.open(self.filename, "r")
  52.         local data = file:read("*a")
  53.         file:close()
  54.         self.logs = serialization.unserialize(data) or {}
  55.     end
  56. end
  57.  
  58. function Logger:saveLogs()
  59.     local file = io.open(self.filename, "w")
  60.     file:write(serialization.serialize(self.logs))
  61.     file:close()
  62. end
  63.  
  64.  
  65. function Logger:logTimeArrayNumNum(amount, balance)
  66.     table.insert(self.logs, {type = "TimeArrayNumNum", time = self:real_time(), nicks = self:scanPlayers(), amount = amount, balance = balance})
  67.   self:saveLogs()
  68. end
  69.  
  70. function Logger:logTimeArrayStringNum(title, count)
  71.     table.insert(self.logs, {type = "TimeArrayStringNum", time = self:real_time(), nicks = self:scanPlayers(), title = title, count = count})
  72.   self:saveLogs()
  73. end
  74.  
  75. function Logger:logTimeArrayString(nick, command)
  76.     table.insert(self.logs, {type = "TimeArrayString", time = self:real_time(), nick = nick, command = command})
  77.   self:saveLogs()
  78. end
  79.  
  80. function Logger:printLogs(page)
  81.     local pageSize = 10
  82.     page = page or 1
  83.     local startIdx = math.max(#self.logs - (page - 1) * pageSize, 1)
  84.     local endIdx = math.max(startIdx - pageSize + 1, 1)
  85.  
  86.     for i = startIdx, endIdx, -1 do
  87.         local log = self.logs[i]
  88.         if log.type == "TimeArrayNumNum" then
  89.             local names = {}
  90.             for _, player in ipairs(log.nicks) do
  91.                 table.insert(names, player.name)
  92.             end
  93.             chatbox.say(string.format("§7%s - §f%s §aпополнил §f%d, §6остаток §c%d.", log.time, table.concat(names, ", "), log.amount, log.balance))
  94.         elseif log.type == "TimeArrayStringNum" then
  95.             local names = {}
  96.             for _, player in ipairs(log.nicks) do
  97.                 table.insert(names, player.name)
  98.             end
  99.             chatbox.say(string.format("§7%s - §f%s, §aВыиграл §f%s, §6x%d", log.time, table.concat(names, ", "), log.title, log.count))
  100.         elseif log.type == "TimeArrayString" then
  101.             chatbox.say(string.format("§7%s - §f%s, §c%s", log.time, log.nick, log.command))
  102.         end
  103.     end
  104. end
  105.  
  106. function Logger:printLogsForNick(nick, page)
  107.     local pageSize = 5
  108.     page = page or 1
  109.     local printed = 0
  110.     local startIdx = #self.logs
  111.  
  112.     for i = startIdx, 1, -1 do
  113.         local log = self.logs[i]
  114.         if log.nicks and table.concat(log.nicks, ", "):find(nick) or log.nick == nick then
  115.             if printed < pageSize * (page - 1) then
  116.                 printed = printed + 1
  117.             else
  118.                 if printed < pageSize * page then
  119.                     if log.type == "TimeArrayNumNum" then
  120.                         local names = {}
  121.                         for _, player in ipairs(log.nicks) do
  122.                             table.insert(names, player.name)
  123.                         end
  124.                         chatbox.say(string.format("§7%s - §f%s §aпополнил §f%d, §6остаток §c%d.", log.time, table.concat(names, ", "), log.amount, log.balance))
  125.                     elseif log.type == "TimeArrayStringNum" then
  126.                         local names = {}
  127.                         for _, player in ipairs(log.nicks) do
  128.                             table.insert(names, player.name)
  129.                         end
  130.                         chatbox.say(string.format("§7%s - §f%s, §aВыиграл §f%s, §6x%d", log.time, table.concat(names, ", "), log.title, log.count))
  131.                     elseif log.type == "TimeArrayString" then
  132.                         chatbox.say(string.format("§7%s - §f%s, §c%s", log.time, log.nick, log.command))
  133.                     end
  134.                     printed = printed + 1
  135.                 else
  136.                     break
  137.                 end
  138.             end
  139.         end
  140.     end
  141. end
  142.  
  143.  
  144. return Logger
  145.  
Advertisement
Add Comment
Please, Sign In to add comment