mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
101 lines
2.9 KiB
Lua
101 lines
2.9 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/
|
|
--]]
|
|
|
|
|
|
local PLUGIN = PLUGIN
|
|
|
|
--Made by Liquid
|
|
PLUGIN.MIN_PLAYER_COUNT = 30
|
|
PLUGIN.STOP_AFTER_CONNECTED_FOR = 600
|
|
PLUGIN.MIN_SIZE = 100
|
|
PLUGIN.TRACE_SIZE = 1000
|
|
|
|
ORIGINAL_NET = ORIGINAL_NET or table.Copy(net)
|
|
|
|
local _net = ORIGINAL_NET
|
|
local IsValid = IsValid
|
|
|
|
local currentMessageName
|
|
hook.Add("DatabaseConnected", "bastionNetSizeLog", function()
|
|
local query = mysql:Create("bastion_netsizelog")
|
|
query:Create("id", "INT UNSIGNED NOT NULL AUTO_INCREMENT")
|
|
query:Create("steamid", "VARCHAR(20) NOT NULL")
|
|
query:Create("timestamp", "INT(11) UNSIGNED NOT NULL")
|
|
query:Create("realtime", "FLOAT NOT NULL")
|
|
query:Create("message_name", "VARCHAR(128) NOT NULL")
|
|
query:Create("size", "INT(11) UNSIGNED NOT NULL")
|
|
query:Create("stack_trace", "TEXT DEFAULT NULL")
|
|
query:PrimaryKey("id")
|
|
query:Callback(function()
|
|
local delete = mysql:Delete("bastion_netsizelog")
|
|
delete:WhereLT("timestamp", os.time() - 3 * 24 * 3600)
|
|
delete:Execute()
|
|
end)
|
|
query:Execute()
|
|
end)
|
|
|
|
local function netLog(players)
|
|
local count = player.GetCount()
|
|
if (count > 1 and count <= PLUGIN.MIN_PLAYER_COUNT) then return end
|
|
|
|
if (type(players) == "Player") then
|
|
players = {players}
|
|
elseif (type(players) == "CRecipientFilter") then
|
|
players = players:GetPlayers()
|
|
end
|
|
|
|
local size = _net.BytesWritten()
|
|
if (size <= PLUGIN.MIN_SIZE) then return end
|
|
|
|
for k, v in ipairs(players) do
|
|
if (!IsValid(v)) then continue end
|
|
|
|
if (v.ixStopNetLog or v:TimeConnected() > PLUGIN.STOP_AFTER_CONNECTED_FOR) then
|
|
v.ixStopNetLog = true
|
|
continue
|
|
end
|
|
|
|
local query = mysql:Insert("bastion_netsizelog")
|
|
query:Insert("steamid", v:SteamID64())
|
|
query:Insert("timestamp", os.time())
|
|
query:Insert("realtime", RealTime())
|
|
query:Insert("message_name", currentMessageName)
|
|
query:Insert("size", size)
|
|
if (size >= PLUGIN.TRACE_SIZE or currentMessageName == "NetStreamDS") then
|
|
query:Insert("stack_trace", debug.traceback())
|
|
end
|
|
query:Execute()
|
|
end
|
|
end
|
|
|
|
net.Start = function(name, unreliable)
|
|
currentMessageName = name
|
|
|
|
return _net.Start(name, unreliable)
|
|
end
|
|
|
|
net.Send = function(players)
|
|
netLog(players)
|
|
currentMessageName = nil
|
|
return _net.Send(players)
|
|
end
|
|
|
|
net.SendOmit = function(players)
|
|
netLog(players)
|
|
currentMessageName = nil
|
|
return _net.SendOmit(players)
|
|
end
|
|
|
|
net.Broadcast = function(pos)
|
|
netLog(player.GetAll())
|
|
currentMessageName = nil
|
|
return _net.Broadcast()
|
|
end
|