Files
wnsrc/lua/sam/ranks/sh_ranks.lua
lifestorm 9c918c46e5 Upload
2024-08-04 23:12:27 +03:00

124 lines
2.4 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/
--]]
if SAM_LOADED then return end
SAM_IMMUNITY_SUPERADMIN = 100
SAM_IMMUNITY_ADMIN = 50
SAM_IMMUNITY_USER = 1
function sam.ranks.get_ranks()
return sam.get_global("Ranks") or {}
end
function sam.ranks.get_rank(rank)
local ranks = sam.ranks.get_ranks()
return ranks[rank]
end
function sam.ranks.is_rank(rank)
if sam.ranks.get_rank(rank) then
return true
else
return false
end
end
function sam.ranks.is_default_rank(rank)
return rank == "superadmin" or rank == "admin" or rank == "user"
end
function sam.ranks.inherits_from(rank, rank_2)
if rank == rank_2 then
return true
end
while true do
rank = sam.ranks.get_rank(rank)
if rank then
local inherits_from = rank.inherit
if inherits_from == rank_2 then
return true
end
rank = rank.inherit
else
return false
end
end
end
function sam.ranks.has_permission(rank, permission)
while true do
if rank == "superadmin" then
return true
end
rank = sam.ranks.get_rank(rank)
if rank then
local rank_permission = rank.data.permissions[permission]
if rank_permission ~= nil then
return rank_permission
end
rank = rank.inherit
else
return false
end
end
end
function sam.ranks.get_limit(rank, limit_type)
while true do
if rank == "superadmin" then return -1 end
rank = sam.ranks.get_rank(rank)
if rank then
local limit = rank.data.limits[limit_type]
if limit ~= nil then
return limit
end
rank = rank.inherit
else
return cvars.Number("sbox_max" .. limit_type, 0)
end
end
end
function sam.ranks.get_immunity(rank)
rank = sam.ranks.get_rank(rank)
return rank and rank.immunity or false
end
function sam.ranks.can_target(rank_1, rank_2)
rank_1, rank_2 = sam.ranks.get_rank(rank_1), sam.ranks.get_rank(rank_2)
if not rank_1 or not rank_2 then
return false
end
return rank_1.immunity >= rank_2.immunity
end
function sam.ranks.get_ban_limit(rank)
rank = sam.ranks.get_rank(rank)
return rank and rank.ban_limit or false
end
if CLIENT then
hook.Add("SAM.ChangedGlobalVar", "SAM.Ranks.CheckLoadedRanks", function(key, value)
if key == "Ranks" then
hook.Call("SAM.LoadedRanks", nil, value)
hook.Remove("SAM.ChangedGlobalVar", "SAM.Ranks.CheckLoadedRanks")
end
end)
end