add sborka

This commit is contained in:
2026-03-31 10:27:04 +03:00
commit f5e5f56c84
2345 changed files with 382127 additions and 0 deletions

View File

@@ -0,0 +1,93 @@
local PLUGIN = PLUGIN
print("[Warn System] Server Side Loaded")
-- Load warnings on startup
function PLUGIN:Initialize()
self.warns = ix.data.Get("warns", {})
end
-- Save warnings to permanent storage
function PLUGIN:SaveWarns()
ix.data.Set("warns", self.warns)
end
net.Receive("ixWarnAdd", function(length, client)
if (!client:IsSuperAdmin()) then return end
local targetSteamID = net.ReadString()
local reason = net.ReadString() or "No reason provided"
PLUGIN.warns = ix.data.Get("warns", {})
PLUGIN.warns[targetSteamID] = PLUGIN.warns[targetSteamID] or {count = 0, history = {}}
local targetData = PLUGIN.warns[targetSteamID]
targetData.count = targetData.count + 1
table.insert(targetData.history, {
admin = client:Name(),
adminSteamID = client:SteamID(),
reason = reason,
time = os.time(),
type = "add"
})
local targetPlayer = player.GetBySteamID(targetSteamID)
if (IsValid(targetPlayer)) then
targetData.name = targetPlayer:Name()
targetData.rank = targetPlayer:GetUserGroup()
targetPlayer:Notify("Вы получили выговор (" .. targetData.count .. "/3). Причина: " .. reason)
end
-- Automatic demotion (3/3 warnings) - Now works for offline players too
if (targetData.count >= 3) then
if (sam) then
-- Use SAM's Lua API for reliable rank setting (offline or online)
sam.player.set_rank_id(targetSteamID, "user", 0)
print("[Warn System] Initiated demotion for " .. targetSteamID .. " via SAM.")
else
-- Fallback for other systems
if (IsValid(targetPlayer)) then
targetPlayer:SetUserGroup("user")
else
-- If offline and not SAM, we attempt console command as last resort
RunConsoleCommand("ulx", "adduser", targetSteamID, "user")
end
end
PLUGIN.warns[targetSteamID] = nil -- Remove from system after demotion
if (IsValid(targetPlayer)) then
targetPlayer:Notify("Вы были автоматически сняты с админ-прав за достижение 3 выговоров.")
end
ix.util.Notify((targetData.name or targetSteamID) .. " был автоматически снят с админ-прав (3/3 выговоров).")
end
PLUGIN:SaveWarns()
ix.util.Notify(client:Name() .. " выдал выговор " .. (targetData.name or targetSteamID) .. ". Причина: " .. reason)
end)
net.Receive("ixWarnRemove", function(length, client)
if (!client:IsSuperAdmin()) then return end
local targetSteamID = net.ReadString()
local index = net.ReadInt(16)
PLUGIN.warns = ix.data.Get("warns", {})
local targetData = PLUGIN.warns[targetSteamID]
if (targetData and targetData.history[index]) then
targetData.count = math.max(0, targetData.count - 1)
table.insert(targetData.history, {
admin = client:Name(),
adminSteamID = client:SteamID(),
reason = "Снятие выговора #" .. index,
time = os.time(),
type = "remove"
})
PLUGIN:SaveWarns()
ix.util.Notify(client:Name() .. " снял выговор у " .. (targetData.name or targetSteamID))
end
end)