У меня есть худ от 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 КБ)
Кстати, если что я имел ввиду про худ над головой. Думаю это важное уточнение, которое я не учел