Как разрешить менять скины для какой либо badmin группы

Всеп привет! Как сделать штуку которая будет позволять менять скин только badmin привелегии (Root). Например я хочу за професию полицейского себе скин аниме девочки. Как это сделать?

В каком виде?
Пример 1:

--Игрок пишет в чат/консоль
setmodel 'Название модели' 
--Игроку ставит модель  

Пример 2:

--Игрок пишет в чат/консоль
modelmenu
--после чего открывается список(меню) со всеми моделями из списка(Таблицы)

Ну или поставить Outfitter

Первое 1

В любой sv файл, клиенту это не надо (у клиента её просто не будет в консоли но будет работать)
Как работает
Игрок пишет в чат setmodel ‘Название модели из таблицы’,
после чего у него изменится моделька,
даже после смерти или смены профф она не слетит,
что бы убрать нужно прописать просто setmodel

--setmodel 'Название модели' 
--'Имя_Без_Пробелов'- указывает имя для модели( можно на русском)
-- Rank- указываем ранг (какому рангу можно использовать, Если стоит RankLock =true то данную модель смогут использовать только указзаные ранги)
--RankLock данную модель с могут использовать только указанные ранги в Rank
--NotRank указанные ранги не смогут использовать данную модель 
--Model - Путь до mld модели

--cmdmodel - Можете поменять на свою команду
--[[
TableModelList={
['Имя_Без_Пробелов']={
   Rank= {1},
   RankLock=false,
   NotRank={},
   Model=''
},
['zombie']={
   Rank= {2},
   RankLock=false,
   NotRank={},
   Model='models/player/zombie_classic.mdl'
},}
]]

local cmdmodel = 'Setmodel'

local TableModelList = {
['zombie']={
   Rank= {2},
   RankLock=true,
   NotRank={},
   Model='models/player/zombie_classic.mdl'
},
}
hook.Add('playerCanRunCommand', 'rp.playerCanRunCommand.canruncmdModel', function(pl,args)
    if args == cmdmodel  then return true end
end)
ba.ranks.Get(1):SetFlags('u')
local cmd = ba.cmd.Create(cmdmodel, function(pl, args)
    local modelTable
    local Models
    local rankText = ''

    if not args.model then
        if pl.SetModelTable then
            pl.SetModelTable = nil

            if string.len(rp.teams[pl:Team()].model[1]) == 1 then
                pl:SetModel(rp.teams[pl:Team()].model)
            else
                pl:SetModel(rp.teams[pl:Team()].model[math.random(1, #rp.teams[pl:Team()].model)])
            end
        else
            ba.notify_err(pl, 'Неуказана модель')
        end
        --

        return
    end

    for k, v in pairs(TableModelList) do
        if args.model ~= k then continue end
        modelTable = TableModelList[k]
        break
    end

    --
    if not modelTable then
        ba.notify_err(pl, 'Модели # не существует!', args[1])

        return
    end

    --
    if table.HasValue(modelTable.NotRank, pl:GetRankTable():GetID()) then
        ba.notify_err(pl, 'Для вашего ранга модель # запрещена!', args.model)

        return
    end

    if modelTable.RankLock then
        Models = table.HasValue(modelTable.Rank, pl:GetRankTable():GetID())

        if not Models then
            for k, v in ipairs(modelTable.Rank) do
                rankText = rankText .. ba.ranks.Get(v):GetName()

                if k == #modelTable.Rank then
                    rankText = rankText .. '.'
                else
                    rankText = rankText .. ', '
                end
            end

            ba.notify_err(pl, 'Модель # разрешена для #', args.model, rankText)

            return
        end
    else
        Models = (modelTable.Rank[1] < pl:GetRankTable():GetID())

        --
        if not Models then
            ba.notify_err(pl, 'Вам для модели # требуется ранг # или выше!',args.model, ba.ranks.Get(modelTable.Rank[1]):GetName())

            return
        end
    end

    pl:SetModel(modelTable.Model)
    pl.SetModelTable = args.model
end):AddParam('string', 'model', 'optional')

local function CheckRankModels(pl, model)
    local CheckModels

    for k, v in pairs(TableModelList) do
        if model ~= k then continue end
        modelTable = TableModelList[k]
        break
    end

    if modelTable.RankLock then
        CheckModels = table.HasValue(modelTable.Rank, pl:GetRankTable():GetID())
    else
        CheckModels = (modelTable.Rank[1] < pl:GetRankTable():GetID())
    end

    timer.Simple(0.01, function()
        if not CheckModels then
            pl.SetModelTable = nil
        else
            pl:SetModel(modelTable.Model)
        end
    end)
end

hook.Add('PlayerSetModel', 'ChangeTeamSetModel', function(pl)
    if not pl.SetModelTable then return end
    CheckRankModels(pl, pl.SetModelTable)
end)

image
image

image
image

image
image

image
image

А куда именно вставлять

в любой файл с припиской sv
ну или самому создать название_sv.lua
Будет так
badmin\lua\ba\plugins\название_sv.lua

–setmodel ‘Название модели’
–‘Имя_Без_Пробелов’- указывает имя для модели( можно на русском)
– Rank- указываем ранг (какому рангу можно использовать, Если стоит RankLock =true то данную модель смогут использовать только указзаные ранги)
–RankLock данную модель с могут использовать только указанные ранги в Rank
–NotRank указанные ранги не смогут использовать данную модель
–Model - Путь до mld модели

–cmdmodel - Можете поменять на свою команду
–[[
TableModelList={
[‘Имя_Без_Пробелов’]={
Rank= {1},
RankLock=false,
NotRank={},
Model=‘’
},
[‘zombie’]={
Rank= {2},
RankLock=false,
NotRank={},
Model=‘models/player/zombie_classic.mdl’
},}
–]]

local cmdmodel = ‘setmodel’

local TableModelList = {
[‘zombie’]={
Rank= {16,17},
RankLock=true,
NotRank={},
Model=‘models/player/zombie_classic.mdl’
},
}
hook.Add(‘playerCanRunCommand’, ‘rp.playerCanRunCommand.canruncmdModel’, function(pl,args)
if args == cmdmodel then return true end
end)
ba.ranks.Get(1):SetFlags(‘u’)
local cmd = ba.cmd.Create(cmdmodel, function(pl, args)
local modelTable
local Models
local rankText = ‘’

if not args.model then
    if pl.SetModelTable then
        pl.SetModelTable = nil

        if string.len(rp.teams[pl:Team()].model[1]) == 1 then
            pl:SetModel(rp.teams[pl:Team()].model)
        else
            pl:SetModel(rp.teams[pl:Team()].model[math.random(1, #rp.teams[pl:Team()].model)])
        end
    else
        ba.notify_err(pl, 'Неуказана модель')
    end
    --

    return
end

for k, v in pairs(TableModelList) do
    if args.model ~= k then continue end
    modelTable = TableModelList[k]
    break
end

--
if not modelTable then
    ba.notify_err(pl, 'Модели # не существует!', args[1])

    return
end

--
if table.HasValue(modelTable.NotRank, pl:GetRankTable():GetID()) then
    ba.notify_err(pl, 'Для вашего ранга модель # запрещена!', args.model)

    return
end

if modelTable.RankLock then
    Models = table.HasValue(modelTable.Rank, pl:GetRankTable():GetID())

    if not Models then
        for k, v in ipairs(modelTable.Rank) do
            rankText = rankText .. ba.ranks.Get(v):GetName()

            if k == #modelTable.Rank then
                rankText = rankText .. '.'
            else
                rankText = rankText .. ', '
            end
        end

        ba.notify_err(pl, 'Модель # разрешена для #', args.model, rankText)

        return
    end
else
    Models = (modelTable.Rank[1] < pl:GetRankTable():GetID())

    --
    if not Models then
        ba.notify_err(pl, 'Вам для модели # требуется ранг # или выше!',args.model, ba.ranks.Get(modelTable.Rank[1]):GetName())

        return
    end
end

pl:SetModel(modelTable.Model)
pl.SetModelTable = args.model

end):AddParam(‘string’, ‘model’, ‘optional’)

local function CheckRankModels(pl, model)
local CheckModels

for k, v in pairs(TableModelList) do
    if model ~= k then continue end
    modelTable = TableModelList[k]
    break
end

if modelTable.RankLock then
    CheckModels = table.HasValue(modelTable.Rank, pl:GetRankTable():GetID())
else
    CheckModels = (modelTable.Rank[1] < pl:GetRankTable():GetID())
end

timer.Simple(0.01, function()
    if not CheckModels then
        pl.SetModelTable = nil
    else
        pl:SetModel(modelTable.Model)
    end
end)

end

hook.Add(‘PlayerSetModel’, ‘ChangeTeamSetModel’, function(pl)
if not pl.SetModelTable then return end
CheckRankModels(pl, pl.SetModelTable)
end)

Пишет Модель разрешена для vip

ba.ranks.Create(‘superadmin’, 17)
:SetImmunity(35000)
:SetRoot(true)

ba.ranks.Create(‘Root’, 16)
:SetImmunity(25000)
:SetRoot(true)

ba.ranks.Create(‘Sudo Root’, 15)
:SetImmunity(20000)
:SetRoot(true)

ba.ranks.Create(‘Staff Leader’, 14)
:SetFlags(‘asdwaqea’)
:SetImmunity(12000)
:SetGlobal(true)
:SetSuperAdmin(true)

ba.ranks.Create(‘Head Curator’, 13)
:SetFlags(‘asdwaqe’)
:SetImmunity(11500)
:SetGlobal(true)
:SetSuperAdmin(true)

ba.ranks.Create(‘Curator’, 12)
:SetFlags(‘asdwaq’)
:SetImmunity(11000)
:SetGlobal(true)
:SetSuperAdmin(true)

ba.ranks.Create(‘Head Admin’, 11)
:SetFlags(‘asdwa’)
:SetImmunity(10500)
:SetGlobal(true)
:SetSuperAdmin(true)

ba.ranks.Create(‘Helper’, 10)
:SetImmunity(10000)
:SetFlags(‘asdw’)
:SetGlobal(true)
:SetAdmin(true)

ba.ranks.Create(‘Owner’, 9)
:SetImmunity(9500)
:SetFlags(‘uvmasgdcaeaq’)
:SetGlobal(true)
:SetAdmin(true)

ba.ranks.Create(‘Unlimited SuperAdmin’, 8)
:SetImmunity(9000)
:SetFlags(‘uvmasgdcaea’)
:SetGlobal(true)
:SetAdmin(true)

ba.ranks.Create(‘Super Admins’, 7)
:SetImmunity(8500)
:SetFlags(‘uvmasgdcae’)
:SetGlobal(true)
:SetAdmin(true)

ba.ranks.Create(‘Unlimited Admin’, 6)
:SetImmunity(8000)
:SetFlags(‘uvmasgdca’)
:SetGlobal(true)
:SetAdmin(true)

ba.ranks.Create(‘StAdmin’, 5)
:SetImmunity(7500)
:SetFlags(‘uvmasgdc’)
:SetGlobal(true)
:SetAdmin(true)

ba.ranks.Create(‘Admins’, 4)
:SetImmunity(6000)
:SetFlags(‘uvma’)
:SetGlobal(true)
:SetAdmin(true)

ba.ranks.Create(‘Moderators’, 3)
:SetImmunity(6500)
:SetFlags(‘uvma’)
:SetGlobal(true)
:SetAdmin(true)

ba.ranks.Create(‘VIP+’, 3)
:SetImmunity(0)
:SetFlags(‘uvu’)
:SetVIP(true)

ba.ranks.Create(‘VIP’, 2)
:SetImmunity(0)
:SetFlags(‘uv’)
:SetVIP(true)

ba.ranks.Create(‘User’, 1)
:SetImmunity(0)
:SetFlags(‘u’)

залей lua как файл и очисти сообщение выше.
сообщение не удобно разбилось.

zombie_sv.lua
Так?

null.lua (14 Байт)
вот так
Отправь сюда то что ты сделал.

Можешь полностью скинуть badmin? свой

zombie.lua (3.2 КБ)

у меня всё отлично работает кроме

hook.Add('playerCanRunCommand', 'rp.playerCanRunCommand.canruncmdModel', function(pl,args)
    if args == cmdmodel  then return true end
--отвечает может ли человек использовать команду вне админмода
end)
-- ФИКС
hook.Add('playerCanRunCommand', 'rp.playerCanRunCommand.canruncmd', function(pl,args)
if args == cmdmodel  then return true end
    if args == ('adminmode' and 'amode')  then return true end
	if pl:GetBVar('adminmode') or not isplayer(pl) then
		return true else
		return false, 'Включите админмод.'
	end
end)

а так всё как надо

Скинь тг я тебе скину свой badmin + badmin_lib

Актуально? Если да, то можете предоставить 2 вариант?)