Files
wnsrc/addons/eprotect_1.4.20/lua/e_protect/modules/sv_netlimiter.lua
lifestorm ba1fc01b16 Upload
2024-08-04 23:12:27 +03:00

79 lines
3.2 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
eProtect = eProtect or {}
eProtect.data = eProtect.data or {}
eProtect.data.netLimitation = eProtect.data.netLimitation or {}
for i = 1, 2048 do
local netstring = util.NetworkIDToString(i)
if !netstring then continue end
if netstring and isstring(netstring) and eProtect.data.netLimitation[netstring] == nil and !eProtect.data.fakeNets[netstring] then
local func = net.Receivers[string.lower(netstring)]
if func then eProtect.data.netLimitation[netstring] = 0 end
end
end
if eProtect.queueNetworking then
eProtect.queueNetworking(nil, "netLimitation")
end
local generalCounter = {}
local specificCounter = {}
local timeout = {}
hook.Add("eP:PreNetworking", "eP:NetLimiter", function(ply, netstring, len)
if !eProtect.data or !eProtect.data.general or eProtect.data.netLimitation[netstring] == -1 or eProtect.config["disabledModules"]["net_limiter"] then return end
if !eProtect.data.netLimitation[netstring] then
local func = net.Receivers[string.lower(netstring)]
if func then eProtect.data.netLimitation[netstring] = 0 end
eProtect.queueNetworking(nil, "netLimitation")
end
local sid, sid64 = ply:SteamID(), ply:SteamID64()
local specific = eProtect.data.netLimitation[netstring] ~= nil and eProtect.data.netLimitation[netstring] > 0 or false
specificCounter[sid] = specificCounter[sid] or {}
if !timeout[sid] then timeout[sid] = CurTime() end
if timeout[sid] and ((CurTime() - timeout[sid]) >= eProtect.data.general.timeout) then
specificCounter[sid] = {}
generalCounter[sid] = 0
timeout[sid] = nil
end
if specific then
specificCounter[sid][netstring] = specificCounter[sid][netstring] or 0
specificCounter[sid][netstring] = specificCounter[sid][netstring] + 1
else
generalCounter[sid] = generalCounter[sid] or 0
generalCounter[sid] = generalCounter[sid] + 1
end
local counter = specific and specificCounter[sid][netstring] or generalCounter[sid]
local limit = specific and eProtect.data.netLimitation[netstring] or eProtect.data.general.ratelimit
if limit > -1 and counter > limit and eProtect.data.general.overflowpunishment > 0 and !eProtect.data.general["bypassgroup"][ply:GetUserGroup()] and !eProtect.data.general["bypass_sids"][sid] and !eProtect.data.general["bypass_sids"][sid64] then
if eProtect.data.general["whitelistergroup"][ply:GetUserGroup()] then
eProtect.data.netLimitation[netstring] = -1
eProtect.queueNetworking(nil, "netLimitation")
return end
eProtect.logDetectionHandeler(ply, "net-overflow", netstring, eProtect.data.general.overflowpunishment)
if eProtect.data.general.overflowpunishment <= 2 then
eProtect.punish(ply, eProtect.data.general.overflowpunishment, slib.getLang("eprotect", eProtect.config["language"], eProtect.data.general.overflowpunishment == 1 and "kick-net-overflow" or "banned-net-overflow"))
end
return false
end
end)