90 lines
3.0 KiB
Lua
90 lines
3.0 KiB
Lua
local PLUGIN = PLUGIN
|
|
PLUGIN.name = "Warn System"
|
|
PLUGIN.author = "Scripty"
|
|
PLUGIN.description = "Modern Warning System for administrators with automatic demotion."
|
|
|
|
print("[Warn System] Loading Plugin...")
|
|
|
|
ix.util.Include("sv_plugin.lua")
|
|
ix.util.Include("cl_plugin.lua")
|
|
ix.util.Include("cl_derma.lua")
|
|
|
|
if (SERVER) then
|
|
util.AddNetworkString("ixWarnSync")
|
|
util.AddNetworkString("ixWarnAdd")
|
|
util.AddNetworkString("ixWarnRemove")
|
|
util.AddNetworkString("ixWarnMenu")
|
|
end
|
|
|
|
ix.command.Add("warn", {
|
|
description = "Open the warning management menu.",
|
|
adminOnly = true,
|
|
superAdminOnly = true, -- Helix support varies, so we keep CanRun
|
|
CanRun = function(self, client)
|
|
return client:IsSuperAdmin()
|
|
end,
|
|
OnRun = function(self, client)
|
|
if (!client:IsSuperAdmin()) then return end
|
|
|
|
local admins = {}
|
|
local warns = ix.data.Get("warns", {})
|
|
|
|
-- Get all players who are online and admins
|
|
for _, v in ipairs(player.GetAll()) do
|
|
if (v:IsAdmin()) then
|
|
admins[v:SteamID()] = {
|
|
name = v:Name(),
|
|
steamID = v:SteamID(),
|
|
rank = v:GetUserGroup(),
|
|
online = true
|
|
}
|
|
end
|
|
end
|
|
|
|
-- Add offline admins who have warnings (Helix data)
|
|
for steamID, data in pairs(warns) do
|
|
if (!admins[steamID]) then
|
|
admins[steamID] = {
|
|
name = data.name or "Unknown",
|
|
steamID = steamID,
|
|
rank = data.rank or "N/A",
|
|
online = false
|
|
}
|
|
end
|
|
end
|
|
|
|
-- Try to fetch ALL admins from SAM database if available
|
|
if (SERVER and sam and sam.SQL) then
|
|
sam.SQL.FQuery("SELECT `steamid`, `name`, `rank` FROM `sam_players` WHERE `rank` != 'user'", {}, function(data)
|
|
if (data) then
|
|
for _, row in ipairs(data) do
|
|
local steamID = row.steamid
|
|
-- Use SteamID if it's already a string, or format it
|
|
if (!admins[steamID]) then
|
|
admins[steamID] = {
|
|
name = (row.name != "" and row.name) or "Unknown",
|
|
steamID = steamID,
|
|
rank = row.rank or "N/A",
|
|
online = false
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
if (IsValid(client)) then
|
|
net.Start("ixWarnMenu")
|
|
net.WriteTable(admins)
|
|
net.WriteTable(warns)
|
|
net.Send(client)
|
|
end
|
|
end)
|
|
else
|
|
-- Fallback/Helix only
|
|
net.Start("ixWarnMenu")
|
|
net.WriteTable(admins)
|
|
net.WriteTable(warns)
|
|
net.Send(client)
|
|
end
|
|
end
|
|
})
|