Files
UpdatePLZ/updateplz/42.13/media/lua/shared/updateplz.lua
2026-02-16 12:12:11 -05:00

88 lines
2.0 KiB
Lua

local getTimestamp = getTimestamp
local isServer = getCore():isDedicated()
UpdatePLZ = UpdatePLZ or {}
local chat do
if isServer then
chat = print
else
require "client/Chat/ISChat.lua"
local chatMsg = {
getTextWithPrefix = function(self)
return self.msg
end,
getText = function(self)
return self.msg
end,
isServerAlert = function() return true end,
isShowAuthor = function() return false end,
getAuthor = function() return "SERVER" end
}
chatMsg.__index = chatMsg
function chat(...)
local msg = table.concat({...}, "\t")
ISChat.addLineInChat(setmetatable({ msg = msg }, chatMsg), 0)
end
end
end
function UpdatePLZ.minutes(secs)
if secs < 60 then
if secs == 1 then
return secs .. " second"
else
return secs .. " seconds"
end
else
if secs / 60 == 1 then
return "1 minute"
else
return (string.gsub(string.gsub(string.format("%.2f", secs / 60), "(%.%d-)0*$", "%1"), "%.$", "")) .. " minutes"
end
end
end
local restartingAt
local nextChatPrint
local function countdown()
local time = getTimestamp()
local delta = restartingAt - time
if not nextChatPrint or nextChatPrint - time <= 0 then
nextChatPrint = time + math.min(delta / 2, 60 * 15)
if math.floor(delta / 60) <= 0 then
chat("WARNING: Server is restarting to update Workshop mods!")
Events.OnTickEvenPaused.Remove(countdown)
else
chat("WARNING: Server is restarting in " .. UpdatePLZ.minutes(delta) .. " to update Workshop mods")
end
end
end
function UpdatePLZ.startRestartCountdown(__restartingAt)
nextChatPrint = nil
restartingAt = __restartingAt
if restartingAt then
Events.OnTickEvenPaused.Add(countdown)
else
Events.OnTickEvenPaused.Remove(countdown)
end
end
if not isServer then
Events.OnInitGlobalModData.Add(function()
Events.OnReceiveGlobalModData.Add(function(key, modData)
if key == "UpdatePLZ" then
UpdatePLZ.startRestartCountdown(modData and modData.restartingAt or nil)
end
end)
ModData.request("UpdatePLZ")
end)
end