Что-ж, часто на форуме и за его пределами слышу о том, что люди хотят иметь !adminmode в SAM админке (как в bAdmin), но не знают как его реализовать.
Это даже не гайд, а готовый код, который вам поможет осуществить свою мечту - предотвратить админ абуз на своем сервере.
Идем по пути \addons\sam-148\lua\sam\modules\util.lua и открываем луашку
закидываем туда данный код
local rpadminmode = { // Кто может использовать !adminmode в РП профессии
['superadmin'] = true,
['НОВЫЙ_РАНГ'] = true,
['НОВЫЙ_РАНГ'] = true,
}
do
command.new("adminmode")
:SetPermission("adminmode", "admin")
:Help("adminmode_help")
:OnExecute(function(ply)
if IsValid(ply) && ply:IsPlayer() && ply:GetNWString('adminmode') == nil || ply:GetNWString('adminmode') ~= true then
if not rpadminmode[ply:GetUserGroup()] then
ply:changeTeam(TEAM_ADMIN, true)
end
ply:SetNWString('adminmode', true)
sam.player.send_message(nil, "adminmode_on", {
A = ply
})
else
if not rpadminmode[ply:GetUserGroup()] then
ply:changeTeam(TEAM_CITIZEN, true)
end
ply:SetNWString('adminmode', false)
ply:SetMoveType(ply:GetMoveType() == MOVETYPE_NOCLIP && MOVETYPE_WALK || MOVETYPE_WALK)
sam.player.send_message(nil, "adminmode_off", {
A = ply
})
end
end)
:End()
sam.permissions.add("can_adminmode", nil, "admin")
hook.Add("PlayerAuthed", "SAM.AdminModeFix", function(ply)
ply:SetNWString('adminmode', false)
end)
hook.Add("OnPlayerChangedTeam","SAM.AdminModeFixV2", function(ply, oldTeam, newTeam)
if CLIENT then return end
if rpadminmode[ply:GetUserGroup()] then return end
if newTeam == TEAM_ADMIN then
ply:SetNWString('adminmode', true)
sam.player.send_message(nil, "adminmode_on", {
A = ply
})
end
if oldTeam == TEAM_ADMIN then
ply:SetNWString('adminmode', false)
ply:SetMoveType(ply:GetMoveType() == MOVETYPE_NOCLIP && MOVETYPE_WALK || MOVETYPE_WALK)
sam.player.send_message(nil, "adminmode_off", {
A = ply
})
end
end)
end
В этой же луашке ищем command.new(“noclip”) и заменяем её на:
local NextUse = 0
local NextUseV = 0
do
command.new("noclip")
:SetPermission("noclip", "admin")
:Help("noclip_help")
:OnExecute(function(ply)
if IsValid(ply) && ply:IsPlayer() && ply:GetNWString('adminmode') == true || ply:GetNWString('adminmode') ~= false then
ply:SetMoveType(ply:GetMoveType() == MOVETYPE_WALK && MOVETYPE_NOCLIP || MOVETYPE_WALK)
sam.player.send_message(nil, "noclip", {
A = ply
})
else
if CurTime() < NextUseV then return end
ply:ChatPrint('Доступно в !adminmode')
NextUseV = CurTime() + 1
end
end)
:End()
sam.permissions.add("can_noclip", nil, "admin")
hook.Add("PlayerNoClip", "SAM.CanNoClip", function(ply)
if ply:HasPermission("can_noclip") && IsValid(ply) && ply:IsPlayer() && ply:GetNWString('adminmode') == true || ply:GetNWString('adminmode') ~= false then
return true
end
if CurTime() < NextUse then return end
ply:ChatPrint('Доступно в !adminmode')
NextUse = CurTime() + 1
end)
end
В этой же луашке ищем sam.hook_first(“PhysgunPickup”, “SAM.CanPhysgunPlayer”, function(ply, target) и заменяем на
sam.hook_first("PhysgunPickup", "SAM.CanPhysgunPlayer", function(ply, target)
if sam.type(target) == "Player" and ply:HasPermission("can_physgun_players") and ply:CanTarget(target) && IsValid(ply) && ply:IsPlayer() && ply:GetNWString('adminmode') == true || ply:GetNWString('adminmode') ~= false then
freeze_player(target)
return true
end
end)
Теперь идем в \addons\sam-148\lua\sam_languages и открываем свой язык
Вставляем туда
adminmode_on = "{A} вошел в режим администратора.",
adminmode_off = "{A} вышел из режима администратора.",
adminmode_help = "Активирует режим администратора.",
АдминМод готов. Те, кто не указан в local rpadminmode = {} при написании команды !adminmode будут перекидываться за профессию Администратор.
Если же просто взять Администратора - то админмод будет включен, а если поменять профессию на любую другую - админмод будет выключен.