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

В общем. У меня на сервере 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!”,
})

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

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)

И что-бы можно-было сделать несколько таких профессий, к каждой из которых вёл отдельный список людей.

Я не смогу объяснять так по этому схема.)

На сервере 3 донат профы.

ЦРУ
САС
ГИГН.

Вася решил купить самую дешёвую профу. То-есть ГИГН. И вот ему можно менять профессию на гигн, однако остальные профы епу не доступны!

Петя решил купить профу подороже. И вот у него в руках профа САС. Другие донатные профы он брать не может.

И тд

Я дал базу, дальше уже сам

Спасибо.

Если есть капитал, могу работать кодером.

Мне нужно написать только-лишь систему захвата точек с наградами в виде патрон, но это очень сложно.

Я сейчас расскажу,если сможешь создать скажешь цену.

Есть 2 основных стороны.
Возьмём НАТО и ОДКБ

Есть точка. Солдат НАТО прибыл на точку. Она не захватывается т.к. нужно 2 человека минимум. К нему прибывает подкрепление. Тени захватывают точку и получают доступ к ящику,который расположен рядом. В ящике спавнятся патроны. Их можно доставать и брать либо в инвентарь либо собственно забирать. Допустим НАТО затаилось патронами но пришло ОДКБ и снесло НАТО к чертям собачьим.при этом доступа к ящику у них нет, ведь точка не под их контролем. Когда они захватили точку они смогли открыть ящик где уже отспавнились новые патроны(допустим одна пачка спавнится раз в 30 секунд)

Однако ночью при попытке захвата точки или открытия ящика будет писаться: ночью захват точек не доступен