Не забирать оружие после смены професии

Здравствуйте, как сделать так чтобы при смене профессии не забиралось одно конкретное оружие?

Легче будет прописать это оружие в jobs.lua

А чтобы просто не забиралось?

после мести игрока все оружия удаляються, просто сделай выдачу при спавне нужно оружия если оно было на момент смерти

В общем, с чатом жопити совместно, насочинял. Нетстринг сделал, потому что нужен был именно он. Но есть проблема, с которой пока не справился. При перезаходе не сохраняется эта переменная. Понял что как-то ее надо проводить, но куда и как пока не выяснил. Направьте на путь истинный

if SERVER then
    util.AddNetworkString("Give_passport")

    net.Receive("Give_passport", function(len, ply)
        if not IsValid(ply) then return end

        if ply:getJobTable().banpassport then
            ply:ChatPrint("Ваша профессия запрещает владение паспортом!")
            return
        end

        if ply:HasWeapon("idcard") then
            ply:ChatPrint("У вас уже есть паспорт!")
            return
        end

        -- Устанавливаем метку и выдаём паспорт с небольшой задержкой, чтобы избежать конфликта сетевых сообщений
        timer.Simple(0.1, function()
            if IsValid(ply) then
                ply:setDarkRPVar("HasPassport", true)
                ply:Give("idcard")
                DarkRP.notify(ply, 3, 4, "Вы получили паспорт!")
            end
        end)
    end)

    -- Проверяем при смене профессии
    hook.Add("OnPlayerChangedTeam", "CheckPassportOnJobChange", function(ply, oldTeam, newTeam)
        if ply:getDarkRPVar("HasPassport") then
            if ply:getJobTable().banpassport then
                -- Если новая профессия запрещает паспорт, изымаем его
                if ply:HasWeapon("idcard") then
                    ply:StripWeapon("idcard")
                end
                ply:ChatPrint("Вы больше не можете владеть паспортом в этой профессии!")
            else
                -- Если профессия разрешает паспорт, выдаём его снова
                timer.Simple(0.1, function()
                    if IsValid(ply) and not ply:HasWeapon("idcard") then
                        ply:Give("idcard")
                        ply:ChatPrint("Вам вернули паспорт!")
                    end
                end)
            end
        end
    end)

    -- Проверяем при спавне
    hook.Add("PlayerSpawn", "CheckPassportOnSpawn", function(ply)
        if ply:getDarkRPVar("HasPassport") then
            if ply:getJobTable().banpassport then
                -- Если профессия запрещает паспорт, удаляем его
                if ply:HasWeapon("idcard") then
                    ply:StripWeapon("idcard")
                end
                ply:ChatPrint("Ваша профессия запрещает владение паспортом!")
            else
                -- Если профессия разрешена, выдаём паспорт
                timer.Simple(0.1, function()
                    if IsValid(ply) and not ply:HasWeapon("idcard") then
                        ply:Give("idcard")
                        ply:ChatPrint("Вам вернули паспорт!")
                    end
                end)
            end
        end
    end)
end

Ну и в общем и целом оцените код

Ну и бред. Создаём нет что-бы не использовать его, забираем паспорт если его нельзя, но зачем забирать если его нет?

Net я импользую в другом месте. И не забираю я его когда его нет
Работает хорошо, sql сделал
И че тут непонятно, получаешь паспорт один раз, а дальше в зависимости от работы он тебе выдается или забирается

Когда Игрок умирает, всё его оружие удаляется.
в хуке спавна игрока стоит проверка на “есть ли у игрока паспорт”
там всегда будет false.
на счёт net. Почему не используется в том же хуке?
Там просто повтор того же самое но через umsg

Действительно, ты прав. Поправлю, скину

А если нужно, не только ID-карту или же несколько сразу оружий?

Таблицу прописать

util.AddNetworkString("Give_passport")

-- Функция выдачи паспорта
local function GivePassport(ply)
    if not IsValid(ply) then return end

    -- Проверяем, запрещена ли профессии владение паспортом
    if ply:getJobTable().banpassport then
        DarkRP.notify(ply, 1, 4, "Ваша профессия запрещает владение паспортом!")
        return
    end

    -- Проверяем, есть ли у игрока уже паспорт
    if ply:HasWeapon("idcard") then
        ply:ChatPrint("У вас уже есть паспорт!")
        return
    end

    -- Выдаём паспорт
    ply:SetNWBool("HasPassport", true)
    ply:Give("idcard")
    DarkRP.notify(ply, 3, 4, "Вы получили паспорт!")
end

-- Функция удаления паспорта
local function RemovePassport(ply)
    if not IsValid(ply) then return end

    if ply:HasWeapon("idcard") then
        ply:StripWeapon("idcard")
    end
    DarkRP.notify(ply, 1, 4, "Ваша профессия запрещает владение паспортом!")
end

-- Проверяем состояние паспорта при спавне или смене профессии
local function CheckPassport(ply)
    if ply:GetNWBool("HasPassport") then
        if ply:getJobTable().banpassport then
            -- Удаляем паспорт, если профессия запрещает его
            RemovePassport(ply)
        else
            -- Выдаём паспорт, если профессия разрешает его
            if not ply:HasWeapon("idcard") then
                ply:Give("idcard")
               -- DarkRP.notify(ply, 3, 4, "Вам вернули паспорт!")
            end
        end
    end
end

-- Сетевой запрос на выдачу паспорта
net.Receive("Give_passport", function(len, ply)
    GivePassport(ply)
end)

-- Хук для смены профессии
hook.Add("OnPlayerChangedTeam", "CheckPassportOnJobChange", function(ply, oldTeam, newTeam)
    CheckPassport(ply)
end)

-- Хук для спавна
hook.Add("PlayerSpawn", "CheckPassportOnSpawn", function(ply)
    CheckPassport(ply)
end)