Files
BarotraumaModServer/LocalMods/LuaCsClientSideEnforced/Lua/Autorun/sv_enforced.lua

61 lines
1.6 KiB
Lua
Executable File

if CLIENT then return end
LuaCsClientSideEnforced = {}
LuaCsClientSideEnforced.KickTimer = 30
LuaUserData.RegisterType("Barotrauma.Networking.FileSender")
local function IsDownloading(client)
for key, value in pairs(Game.Server.FileSender.ActiveTransfers) do
if value.Connection == client.Connection then
return true
end
end
return false
end
local clients = {}
local function GetOrCreateData(client)
if not clients[client] then
clients[client] = {}
clients[client].HasInstalled = false
clients[client].KickTimer = 0
end
return clients[client]
end
-- assume every already connected client has already client-side installed
for _, client in pairs(Client.ClientList) do
local data = GetOrCreateData(client)
data.HasInstalled = true
data.KickTimer = 0
end
Networking.Receive("client_side_enforced", function(message, client)
local data = GetOrCreateData(client)
if data.HasInstalled then return end
data.HasInstalled = true
data.KickTimer = 0
Logger.Log(TextManager.Get("luacs.svenforced.heartbeat").Value .. client.Name, Color.Green)
end)
Hook.Add("client.connected", "ClientSideEnforced", function (client)
GetOrCreateData(client)
end)
Hook.Add("think", "ClientSideEnforced", function(client)
for client, data in pairs(clients) do
if not data.HasInstalled and not IsDownloading(client) then
if data.KickTimer > LuaCsClientSideEnforced.KickTimer then
client.Kick(TextManager.Get("luacs.enforced.kickmessage").Value)
else
data.KickTimer = data.KickTimer + 1/60
end
end
end
end)