dobrograd-13-06-2022/garrysmod/addons/admin-sg/lua/plugins/recentdisconnects/cl_panel.lua
Jonny_Bro (Nikita) e4d5311906 first commit
2023-11-16 15:01:19 +05:00

122 lines
No EOL
3 KiB
Lua

--[[
© 2017 Thriving Ventures Limited do not share, re-distribute or modify
without permission of its author (gustaf@thrivingventures.com).
]]
local plugin = plugin;
local category = {};
category.name = "Recent disconnects";
category.material = "serverguard/menuicons/icon_disconnects.png";
category.permissions = "View Disconnects";
function category:Create(base)
base.panel = base:Add("tiger.panel")
base.panel:SetTitle("View recently disconnected players")
base.panel:Dock(FILL)
base.panel:DockPadding(24, 24, 24, 48)
base.panel.list = base.panel:Add("tiger.list")
base.panel.list:Dock(FILL)
base.panel.list.sortColumn = 3
base.panel.list:AddColumn("PLAYER", 250)
base.panel.list:AddColumn("STEAMID", 250)
base.panel.list:AddColumn("RANK", 75)
local refresh = base.panel:Add("tiger.button")
refresh:SetPos(4, 4)
refresh:SetText("Refresh")
refresh:SizeToContents()
function refresh:DoClick()
base.panel.list:Clear()
serverguard.netstream.Start("sgRequestDisconnects", true);
end
function base.panel.list:Think()
if (self.nextUpdate and self.nextUpdate <= CurTime()) then
refresh:DoClick()
self.nextUpdate = nil
end
end
function base.panel:PerformLayout()
local w, h = self:GetSize()
refresh:SetPos(w -(refresh:GetWide() +24), h -(refresh:GetTall() +14))
end
category.list = base.panel.list
end;
function category:ClearDisconnects()
self.list:Clear();
self.list.list:PerformLayout();
end
function category:Update(base)
self:ClearDisconnects();
serverguard.netstream.Start("sgRequestDisconnects", true);
end;
function category:UpdateDisconnects(data)
local steamid = data[1];
local rank = data[2];
local name = data[3];
if (rank and rank == "user") then return; end;
local rankData = serverguard.ranks:GetRank(rank);
local rankName = "";
if (!rankData) then
rankName = "Unknown rank (REMOVED)";
else
rankName = rankData.name;
end;
local panel = category.list:AddItem(name, steamid, rankName);
panel.steamid = steamid;
function panel:OnMousePressed()
if !serverguard.player:HasPermission(LocalPlayer(), "Ban") and serverguard.player:GetBanLimit(admin) != 0 then return end;
local menu = DermaMenu();
menu:SetSkin("serverguard");
local banMenu, menuOption = menu:AddSubMenu("Ban");
banMenu:SetSkin("serverguard");
menuOption:SetImage("icon16/delete.png");
for k, v in pairs(serverguard.banLengths) do
local option = banMenu:AddOption(v[1], function()
Derma_StringRequest("Ban Reason", "Specify ban reason.", "", function(text)
serverguard.command.Run("ban", false, steamid, v[2], text);
end, function(text) end, "Accept", "Cancel");
end);
option:SetImage("icon16/clock.png");
end;
menu:Open();
end;
if (rankData) then
local rankLabel = panel:GetLabel(3);
rankLabel:SetColor(rankData.color);
rankLabel:SetSort(rankData.immunity);
rankLabel.oldColor = rankData.color;
end;
end;
plugin:AddSubCategory("Intelligence", category);
serverguard.netstream.Hook("sgGetDisconnects", function(data)
category:UpdateDisconnects(data);
end);