Files
VnUtest/garrysmod/gamemodes/militaryrp/plugins/warn/sh_plugin.lua
2026-03-31 10:27:04 +03:00

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
})