Как запретить использовать определенные админ команды определенным группам? (SAM)
Самое простое решение, без лишних модулей
Не забудь изменить профессию администратора, на свою
local blocked_cmds = {
["noclip"] = true,
}
hook.Add("SAM.CanRunCommand", "testingCode", function(ply, cmd_name)
if ply:IsSuperAdmin() then return end
if (blocked_cmds[cmd_name] and ply:Team() ~= TEAM_ADMIN) then
return false
end
end)
Окей, а как запретить трогать игроков и их пропы физганом в РП профе?
- укажи, куда это закидывать
- какой тип файла это
полагаю, это модуль sv части?
Просто файл, закидываешь в серверную часть
Пример пути: “/addons/любое_имя/lua/autorun/server/blabla.lua”
На счет физгана, не изучал
Думаю, благодаря CAMI в SAM (can_physgun_players) это можно реализовать легко
-- addons/anyname/lua/autorun/server/sam_physgun.lua
hook.Add("CAMI.PlayerHasAccess", "SAM.PhysgunLimit", function(pl, privilege, callback)
if privilege == "can_physgun_players" and pl:Team() ~= TEAM_ADMIN then
callback(false)
end
end)
Да, кстати
SAM ломается.
Не знаю почему, но быть может, потому что я добавил проверку на суперадмина в строчку if (blocked_cmds[cmd_name] and ply:Team() ~= TEAM_ADMIN) or ply:IsSuperAdmin() then
Я обновил код, возьми его
Мне к сожалению не помогло.
Лично у меня такой код:
local disallowed_commands = {
["goto"] = true,
["bring"] = true,
["return"] = true,
["noclip"] = true,
["slay"] = true,
["slap"] = true,
["freeze"] = true,
["unfreeze"] = true,
["scale"] = true,
["giveammo"] = true,
["give"] = true
}
hook.Add("SAM.CanRunCommand", "SAM.DisallowedCommands", function(ply, cmd)
if IsValid(ply) then
local disallowed_command = disallowed_commands[cmd]
if disallowed_command and ply:Team() ~= TEAM_ADMIN or not ply:CheckGroup('superadmin') then
sam.player.send_message(ply, "'{S}' данную команду запрещено использовать в РП Профессии!", {
S = cmd
})
return false
end
end
end)
Я как раз написал минут 10 назад подобный код ,сейчас сравню и уже завтра отпишу ,если поможет большое тебе спасибо.
с этим кодом проблема
Если я суперадмин я всё могу юзать
Но
Если я даже в профе админа и рангом ниже superadmin - пишет что я не могу юзать команды в рп профе, которые прописал в disallowed_commands
Т.е. если я условно admin и нахожусь в TEAM_ADMIN - я не могу использовать команды…
noclip все равно работает в рп проф
hook.Add('PlayerNoClip', 'restrict_rpteam', function(ply, state)
if state and ply:Team() ~= TEAM_ADMIN and not ply:CheckGroup('superadmin') then return false end
end)
Я лично это для ноуклипа использую
local allowedSteamIDs = {
"STEAM_0:1:583828277",
"STEAM_0:0:518856850",
"STEAM_0:1:731071929"
}
local allowedJob = "Администратор"
hook.Add("PlayerSay", "RestrictNoClipCommand", function(ply, text)
local command = string.lower(text)
if command == "!noclip" or command == "/noclip" then
local job = ply:getDarkRPVar("job")
local isAllowed = job == allowedJob or table.HasValue(allowedSteamIDs, ply:SteamID())
if not isAllowed then
-- Если игрок находится в noclip, отключаем его
if ply:GetMoveType() == MOVETYPE_NOCLIP then
ply:SetMoveType(MOVETYPE_WALK)
end
return ""
end
end
end)
hook.Add("PlayerNoClip", "RestrictNoClipByAdminStatus", function(ply, desiredState)
local job = ply:getDarkRPVar("job")
local isAllowed = job == allowedJob or table.HasValue(allowedSteamIDs, ply:SteamID())
if not isAllowed then
if ply:GetMoveType() == MOVETYPE_NOCLIP then
ply:SetMoveType(MOVETYPE_WALK)
end
return false
end
return true
end)