Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local serialization = require("serialization")
- local filesystem = require("filesystem")
- local component = require("component")
- local chatbox = component.chat_box
- local radar = component.os_entdetector
- local Logger = {}
- Logger.logs = {}
- Logger.filename = "/home/logfile.log"
- function Logger:scanPlayers()
- local players = radar.scanPlayers()
- local result = {}
- for i, player in ipairs(players) do
- table.insert(result, {name = player.name, range = player.distance or math.huge}) -- Если distance nil, используем очень большое значение
- end
- -- Сортировка игроков по дистанции
- table.sort(result, function(a, b)
- if a.range and b.range then
- return a.range > b.range
- end
- return false -- Если одно из значений nil, не пытаемся их сортировать
- end)
- return result
- end
- function Logger:getHostTime(timezone)
- timezone = timezone or 2
- local file = io.open("/HostTime.tmp", "w")
- file:write("")
- file:close()
- local timeCorrection = timezone * 3600
- local lastModified = tonumber(string.sub(filesystem.lastModified("/HostTime.tmp"), 1, -4)) + timeCorrection
- filesystem.remove("/HostTime.tmp")
- 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)
- return tonumber(day), tonumber(month), tonumber(year), tonumber(hour), tonumber(minute), tonumber(second)
- end
- function Logger:real_time()
- local time = {self:getHostTime(1)}
- local text = string.format("%02d:%02d:%04d %02d:%02d:%02d", time[1], time[2], time[3], time[4], time[5], time[6])
- return text
- end
- function Logger:loadLogs()
- if filesystem.exists(self.filename) then
- local file = io.open(self.filename, "r")
- local data = file:read("*a")
- file:close()
- self.logs = serialization.unserialize(data) or {}
- end
- end
- function Logger:saveLogs()
- local file = io.open(self.filename, "w")
- file:write(serialization.serialize(self.logs))
- file:close()
- end
- function Logger:logTimeArrayNumNum(amount, balance)
- table.insert(self.logs, {type = "TimeArrayNumNum", time = self:real_time(), nicks = self:scanPlayers(), amount = amount, balance = balance})
- self:saveLogs()
- end
- function Logger:logTimeArrayStringNum(title, count)
- table.insert(self.logs, {type = "TimeArrayStringNum", time = self:real_time(), nicks = self:scanPlayers(), title = title, count = count})
- self:saveLogs()
- end
- function Logger:logTimeArrayString(nick, command)
- table.insert(self.logs, {type = "TimeArrayString", time = self:real_time(), nick = nick, command = command})
- self:saveLogs()
- end
- function Logger:printLogs(page)
- local pageSize = 10
- page = page or 1
- local startIdx = math.max(#self.logs - (page - 1) * pageSize, 1)
- local endIdx = math.max(startIdx - pageSize + 1, 1)
- for i = startIdx, endIdx, -1 do
- local log = self.logs[i]
- if log.type == "TimeArrayNumNum" then
- local names = {}
- for _, player in ipairs(log.nicks) do
- table.insert(names, player.name)
- end
- chatbox.say(string.format("§7%s - §f%s §aпополнил §f%d, §6остаток §c%d.", log.time, table.concat(names, ", "), log.amount, log.balance))
- elseif log.type == "TimeArrayStringNum" then
- local names = {}
- for _, player in ipairs(log.nicks) do
- table.insert(names, player.name)
- end
- chatbox.say(string.format("§7%s - §f%s, §aВыиграл §f%s, §6x%d", log.time, table.concat(names, ", "), log.title, log.count))
- elseif log.type == "TimeArrayString" then
- chatbox.say(string.format("§7%s - §f%s, §c%s", log.time, log.nick, log.command))
- end
- end
- end
- function Logger:printLogsForNick(nick, page)
- local pageSize = 5
- page = page or 1
- local printed = 0
- local startIdx = #self.logs
- for i = startIdx, 1, -1 do
- local log = self.logs[i]
- if log.nicks and table.concat(log.nicks, ", "):find(nick) or log.nick == nick then
- if printed < pageSize * (page - 1) then
- printed = printed + 1
- else
- if printed < pageSize * page then
- if log.type == "TimeArrayNumNum" then
- local names = {}
- for _, player in ipairs(log.nicks) do
- table.insert(names, player.name)
- end
- chatbox.say(string.format("§7%s - §f%s §aпополнил §f%d, §6остаток §c%d.", log.time, table.concat(names, ", "), log.amount, log.balance))
- elseif log.type == "TimeArrayStringNum" then
- local names = {}
- for _, player in ipairs(log.nicks) do
- table.insert(names, player.name)
- end
- chatbox.say(string.format("§7%s - §f%s, §aВыиграл §f%s, §6x%d", log.time, table.concat(names, ", "), log.title, log.count))
- elseif log.type == "TimeArrayString" then
- chatbox.say(string.format("§7%s - §f%s, §c%s", log.time, log.nick, log.command))
- end
- printed = printed + 1
- else
- break
- end
- end
- end
- end
- end
- return Logger
Advertisement
Add Comment
Please, Sign In to add comment