Как систему привязать к hud?

У меня есть худ от luctus, есть система приписок, как сделать отображение последних в худе?

и как мы должны тебе это сказать ?
есть худ, есть система - скажите как делать, для этого я вам ничего не дам.

я чет не понял смысловой части твоего обращения. Орфография не соблюдается, хотя, даже если бы и не соблюдалась, можно было и понять, что не каждый это поймет. Обьясни это на своем языке и более изложенно

Дай код системы приписок, тебе нужно получить функцию или GetNW2String выводящее значение для игрока, а потом ее использовать в худе

так ему легче через nw library сделать это

Орфография соблюдается в тексте, я на русском языке объяснил суть мыслей, мне нужно отображение приписок в худе.

Код приписок:

if SERVER then
    util.AddNetworkString("OpenWLMenu")
    util.AddNetworkString("RequestPlayerData")
    util.AddNetworkString("SendPlayerData")

    local function getFactionFile(faction)
        return "faction_ranks/"..faction.."_data.json"
    end

    local function loadFactionData(faction)
        if not file.Exists(getFactionFile(faction), "DATA") then
            return { whitelist = {}, ranks = {}, positions = {}, roles = {}, players = {} }
        end
        return util.JSONToTable(file.Read(getFactionFile(faction), "DATA")) or {}
    end

    local function saveFactionData(faction, data)
        file.Write(getFactionFile(faction), util.TableToJSON(data, true))
    end

    hook.Add("PlayerSay", "OpenWLCommand", function(ply, text)
        local args = string.Explode(" ", text)
        if args[1]:lower() ~= "!wl" then return end

        local faction = args[2] or ""
        local data = loadFactionData(faction)
        if not data then return "" end

        local function CanAccessWL(p)
            if p:IsUserGroup("ROOT") or p:IsUserGroup("Chiref Curator") or p:IsUserGroup("Deputy Curator") then
                return true
            end
            return data.whitelist[p:SteamID64()] == true
        end

        if not CanAccessWL(ply) then
            ply:ChatPrint("Доступ к меню ВЛ запрещён!")
            return ""
        end

        net.Start("OpenWLMenu")
            net.WriteString(faction)
        net.Send(ply)
        return ""
    end)

    net.Receive("RequestPlayerData", function(len, ply)
        local faction = net.ReadString()
        local data = loadFactionData(faction)

        local playersTbl = {}
        for _, target in ipairs(player.GetAll()) do
            playersTbl[#playersTbl+1] = {
                name = target:Nick(),
                steamid = target:SteamID64(),
                role = RPExtraTeams[target:Team()] and RPExtraTeams[target:Team()].name or "Unknown",
                roleColor = team.GetColor(target:Team()) or Color(255,255,255)
            }
        end

        net.Start("SendPlayerData")
            net.WriteTable(playersTbl)
            net.WriteTable(data)
        net.Send(ply)
    end)

    net.Receive("SendPlayerData", function(len, ply)
        local faction = net.ReadString()
        local steamID = net.ReadString()
        local rank = net.ReadString()
        local positions = net.ReadString()
        local roles = net.ReadTable()
        local wlFlag = net.ReadBool()

        local data = loadFactionData(faction)
        data.players = data.players or {}
        data.players[steamID] = {
            rank = rank,
            position = positions,
            roles = roles,
            wl = wlFlag
        }
        if wlFlag then
            data.whitelist[steamID] = true
        else
            data.whitelist[steamID] = nil
        end

        saveFactionData(faction, data)
    end)
end

if CLIENT then
    local factionName = ""

    net.Receive("OpenWLMenu", function()
        factionName = net.ReadString()

        local frame = vgui.Create("DFrame")
        frame:SetTitle("ВЛ - "..factionName)
        frame:SetSize(400, 500)
        frame:Center()
        frame:MakePopup()

        local playerList = vgui.Create("DPanelList", frame)
        playerList:Dock(FILL)
        playerList:EnableVerticalScrollbar(true)

        net.Start("RequestPlayerData")
            net.WriteString(factionName)
        net.SendToServer()

        net.Receive("SendPlayerData", function()
            local playersTbl = net.ReadTable()
            local dataTbl = net.ReadTable()

            for _, plyData in ipairs(playersTbl) do
                local btn = vgui.Create("DButton")
                btn:SetText(plyData.name)
                btn:Dock(TOP)
                btn:DockMargin(2,2,2,2)
                btn:SetTall(30)
                btn.DoClick = function()
                    local w = vgui.Create("DFrame")
                    w:SetTitle(plyData.name)
                    w:SetSize(300, 250)
                    w:Center()
                    w:MakePopup()

                    local yOffset = 30

                    local rankLabel = vgui.Create("DLabel", w)
                    rankLabel:SetPos(10, yOffset)
                    rankLabel:SetText("Звание:")
                    rankLabel:SizeToContents()
                    local rankEntry = vgui.Create("DComboBox", w)
                    rankEntry:SetPos(100, yOffset)
                    rankEntry:SetSize(180, 20)
                    if dataTbl.ranks then
                        for _, r in ipairs(dataTbl.ranks) do rankEntry:AddChoice(r) end
                    end
                    yOffset = yOffset + 30

                    local roleLabel = vgui.Create("DLabel", w)
                    roleLabel:SetPos(10, yOffset)
                    roleLabel:SetText("Роли:")
                    roleLabel:SizeToContents()
                    local rolesCheck = {}
                    if dataTbl.roles then
                        for i, role in ipairs(dataTbl.roles) do
                            local cb = vgui.Create("DCheckBoxLabel", w)
                            cb:SetPos(100, yOffset)
                            cb:SetText(role)
                            cb:SetValue(0)
                            rolesCheck[#rolesCheck+1] = cb
                            yOffset = yOffset + 25
                        end
                    end
                    yOffset = yOffset + 5

                    local posLabel = vgui.Create("DLabel", w)
                    posLabel:SetPos(10, yOffset)
                    posLabel:SetText("Приписка:")
                    posLabel:SizeToContents()
                    local posEntry = vgui.Create("DTextEntry", w)
                    posEntry:SetPos(100, yOffset)
                    posEntry:SetSize(180, 20)
                    yOffset = yOffset + 40

                    local wlFlag = false
                    if LocalPlayer():IsUserGroup("ROOT") or LocalPlayer():IsUserGroup("Chiref Curator") or LocalPlayer():IsUserGroup("Deputy Curator") then
                        local wlCB = vgui.Create("DCheckBoxLabel", w)
                        wlCB:SetPos(10, yOffset)
                        wlCB:SetText("ВЛ")
                        wlCB:SetValue(0)
                        wlCB.OnChange = function(_, val) wlFlag = val end
                        yOffset = yOffset + 30
                    end

                    local btnConfirm = vgui.Create("DButton", w)
                    btnConfirm:SetText("Подтвердить")
                    btnConfirm:SetSize(120, 30)
                    btnConfirm:SetPos(90, yOffset)
                    btnConfirm.DoClick = function()
                        local selectedRoles = {}
                        for _, cb in ipairs(rolesCheck) do
                            if cb:GetChecked() then table.insert(selectedRoles, cb:GetText()) end
                        end

                        net.Start("SendPlayerData")
                            net.WriteString(factionName)
                            net.WriteString(plyData.steamid)
                            net.WriteString(rankEntry:GetSelected() or "")
                            net.WriteString(posEntry:GetValue() or "")
                            net.WriteTable(selectedRoles)
                            net.WriteBool(wlFlag)
                        net.SendToServer()

                        w:Close()
                    end
                end

                playerList:AddItem(btn)
            end
        end)
    end)
end

Худ:
luctus_shud.zip (19,3 КБ)

Тебе нужно передать значение из JSON клиенту, чтобы он мог отобразить приписку в худе, как я уже и говорил тебе легче сохранять их в глобальную таблицу или лучше в БД

Можем связаться в дс, обьяснишь как это сделать если не сложно

у тебя есть вот эта функция, которая записывает в файл json данные об игроке, его звании и ранге. Передай nwstring эти данные и назначь их на юзера. Опять же, библиотека NetVar поможет тебе с этим
nw_library.lua (9,7 КБ)

Кстати, если что я имел ввиду про худ над головой. Думаю это важное уточнение, которое я не учел