Как сделать донат профессию

Помогите как сделать Vip Профессию и так же как настроить продажу доната например продать драгунов за 250 рублей помогите пж!

Чтобы сделать VIP-профессию тебе нужно в конфигурации профессии добавить такое поле:

-- Начало файла
local vipgroups = {
    ['VIP'] = true,
    ['admin'] = true,
    ['superadmin'] = true,
    -- И так далее
}
local meta = FindMetaTable('Player')
function meta:IsVIP()
    return vipgroups[self:GetUserGroup()]
end

-- Поле в конфиге профессии
customCheck = function(ply)
    return ply:IsVIP(), 'Ты не VIP'
end

Смотри, мне прям все скопировать и вставить в начало скрипта в конфигурациях профессий?

Для людей в “Теме” объяснение имеется.
Но раз не понял то:
В файле с профессиями вставить

local groups = {
    ['vip'] = true,
    ['admin'] = true,
    ['superadmin'] = true,
}
local meta = FindMetaTable('Player')
function meta:IsGroup()--поменял с VIP так как не корректно 
    return groups[self:GetUserGroup()]
end

В саму профессию вставить так чтобы получилось:

TEAM_CITIZENM = rp.addTeam(' Мега гражданин', {
	color = Color(100,200,100),
	model = Mcitizens,
	weapons = {},
	command = 'Mcitizen',
	max = 0,
	salary = 45,
	hasLicense = true,
	candemote = false
        customCheck = function(ply)
              return ply:IsGroup(), 'Нет Прав'
        end
})

В общем. У меня на сервере MIlitary RP стоит лучший по моему мнению вайт лист. Ez WhiteList. Однако я хочу что-бы на сервере были донат профессии. Что-бы при попытке изменить профу через вайт лист писало что это донат профа.

Изменение профессий у меня только через ВайтЛист.

cl_ez_jw.lua (13,5 КБ)
sv_ez_jw.lua (2,3 КБ)
sh_ez_jw.lua (275 байтов)

Есть теория что это можно сделать с помощью этих строк кода
customCheck = function(ply)
return CLIENT or table.HasValue({“STEAM:0:1_234561111”}, ply:SteamID())
end,
CustomCheckFailMsg = “This job is donator only!”,
})

Однако я не знаю как и куда их вписывать!

https://forum.gm-donate.net/t/donat-professiya/2443

admin = 3?

Что ты вообще подразумеваешь под “Донатная профессия”? По типу випки?

Нет. Профессия - Профессия доступная только отдельным игрокам. Не VIP. Что-то типо профы по STEAM:ID.

Не хочу создавать костыли, ведь нужно выдать одному донат командиру ранг КМД. ВИП будет мешать.

После файлов я указал как сделать это без белого списка.

Белый список просто игнорит эти строки.

image

что-бы было так при попытке изменить профу через белый список.

Личная профа Попробуй это,тут профессия только по стим айди доступна

Кроме тех, чей стим ID вписан.

Нет, это как-раз для ВИП профессий.

Кстати, вайт лист продолжает игнорировать это всё.

тебе надо немного поковыряться в коде. Сначала создай список донат-проф, типо так:

ez_jw.DonateJobs = {
    [TEAM_SOME_DONATE_JOB] = true,
    [TEAM_ANOTHER_DONATE_JOB] = true,
    -- и так далее...
}

Теперь давай добавим чекер прямо в ту функцию, которая отвечает за смену профы. Это net.Receive("EZ_JW.ChangeTeam", ...) . Вот как это делается:

net.Receive("EZ_JW.ChangeTeam", function(len, ply)
    if table.HasValue(ez_jw.Ranks, ply:GetUserGroup()) or table.HasValue(ez_jw.AllowedSteamID, ply:SteamID()) then
        local p = net.ReadEntity()
        local t = net.ReadFloat()
        local name = net.ReadString()

        if IsValid(p) then
            -- Чекаем, не донат ли это
            if ez_jw.DonateJobs[t] then
                DarkRP.notify(ply, 1, 5, "Эта профа только для крутых донатеров.")
                return
            end

            -- Если всё ок, то можно менять профу
            p:SetPData("EZ_JW.Team", t)
            setRPName(ply, p, name)
            p.ez_jw_canchangejob = true
            p:changeTeam(t, true)
        end
    end
end)

Таким образом, если игрок пытается взять донат-профу, ему прилетает сообщение.

Теперь сделаем проверку на VIP-статус или выше, чтобы понять, донатер ли чел. В той же функции net.Receive("EZ_JW.ChangeTeam", ...) добавим новый код для проверки. Представим, что у тебя есть список для этого:

ez_jw.DonateRanks = {
    ["vip"] = true,
    ["super_vip"] = true,
    -- и так далее...
}

Теперь добавляем эту проверку в функцию:

net.Receive("EZ_JW.ChangeTeam", function(len, ply)
    if table.HasValue(ez_jw.Ranks, ply:GetUserGroup()) or table.HasValue(ez_jw.AllowedSteamID, ply:SteamID()) then
        local p = net.ReadEntity()
        local t = net.ReadFloat()
        local name = net.ReadString()

        if IsValid(p) then
            local canChange = true  -- переменная, которая будет говорить, можно ли менять профу

            -- Чекаем, не донат ли это
            if ez_jw.DonateJobs[t] then
                -- Теперь смотрим, донатер ли чел
                if not ez_jw.DonateRanks[ply:GetUserGroup()] then
                    DarkRP.notify(ply, 1, 5, "Эта профа только для крутых донатеров.")
                    canChange = false  -- если не донатер, то менять профу нельзя
                end
            end

            if canChange then  -- если можно менять профу, то делаем это
                p:SetPData("EZ_JW.Team", t)
                setRPName(ply, p, name)
                p.ez_jw_canchangejob = true
                p:changeTeam(t, true)
            end
        end
    end
end)

Вот и всё, дальше под себя изменяй.

Спасибо большое! Но можно ли сделать что-бы это была профессия не по рангу(например вип), а по steam:id. То-есть чтобы сменить эту профу могли не випы, а указанные игроки.


ez_jw.DonateSteamIDs = {
    ["STEAM_0:1:12345678"] = true,
    ["STEAM_0:0:87654321"] = true,
    -- и так далее...
}

net.Receive("EZ_JW.ChangeTeam", function(len, ply)
    if table.HasValue(ez_jw.Ranks, ply:GetUserGroup()) or table.HasValue(ez_jw.AllowedSteamID, ply:SteamID()) then
        local p = net.ReadEntity()
        local t = net.ReadFloat()
        local name = net.ReadString()

        if IsValid(p) then
            local canChange = true  -- переменная, которая будет говорить, можно ли менять профу

            -- Чекаем, не донат ли это
            if ez_jw.DonateJobs[t] then
                -- Теперь смотрим, есть ли SteamID в массиве
                if not ez_jw.DonateSteamIDs[ply:SteamID()] then
                    DarkRP.notify(ply, 1, 5, "Эта профа только для избранных, бро.")
                    canChange = false  -- если SteamID не в списке, то менять профу нельзя
                end
            end

            if canChange then  -- если можно менять профу, то делаем это
                p:SetPData("EZ_JW.Team", t)
                setRPName(ply, p, name)
                p.ez_jw_canchangejob = true
                p:changeTeam(t, true)
            end
        end
    end
end)

а куда это писать , типа sv_ez_jw.lua ?

место

sv_ez_jw (1).lua (2,6 КБ)