Как мне сделать менюшку чтобы можно было переключать купленные скины. Допустим прописал в чат /models и он открывал менюшку с купленными скинами где ты мог их переключать
Я попробовал сделать, то руки лио из одно место растут то или сам igs не интегрируется с менюшкой
garrysmod/lua/autorun/server
util.AddNetworkString("IGS_OpenModelMenu")
util.AddNetworkString("IGS_SetModel")
hook.Add("PlayerSay", "IGS_OpenModelSlashCommand", function(ply, text)
if string.lower(text) == "/models" then
print("[IGS] Игрок использовал /models:", ply:Nick())
local owned = {}
local items = IGS:GetItems()
if not items then
print("[IGS] IGS:GetItems() вернул nil")
return ""
end
for _, item in pairs(items) do
if istable(item)
and isfunction(item.GetCategory)
and isfunction(item.HasPurchase)
and isfunction(item.GetPlayerModel)
then
if item:GetCategory() == "Модельки" and item:HasPurchase(ply) then
local mdl = item:GetPlayerModel()
if mdl and isstring(mdl) then
table.insert(owned, {
name = item:GetName(),
model = mdl
})
end
end
end
end
print("[IGS] Найдено моделей: " .. #owned)
ply.IGS_OwnedModels = owned
net.Start("IGS_OpenModelMenu")
net.WriteUInt(#owned, 8)
for _, mdl in ipairs(owned) do
net.WriteString(mdl.name)
net.WriteString(mdl.model)
end
net.Send(ply)
return ""
end
end)
net.Receive("IGS_SetModel", function(_, ply)
local mdl = net.ReadString()
if not isstring(mdl) then return end
for _, data in ipairs(ply.IGS_OwnedModels or {}) do
if data.model == mdl then
print("[IGS] Установка модели:", mdl)
ply:SetModel(mdl)
return
end
end
end)
garrysmod/lua/autorun/client
net.Receive("IGS_OpenModelMenu", function()
local count = net.ReadUInt(8)
if count == 0 then
chat.AddText(Color(255, 100, 100), "[IGS] У тебя нет купленных моделей.")
return
end
local models = {}
for i = 1, count do
table.insert(models, {
uid = net.ReadString(),
name = net.ReadString(),
model = net.ReadString()
})
end
local frame = vgui.Create("DFrame")
frame:SetTitle("Купленные модели")
frame:SetSize(400, 300)
frame:Center()
frame:MakePopup()
local list = vgui.Create("DScrollPanel", frame)
list:Dock(FILL)
for _, m in ipairs(models) do
local btn = list:Add("DButton")
btn:Dock(TOP)
btn:DockMargin(5, 5, 5, 0)
btn:SetText(m.name)
btn.DoClick = function()
net.Start("IGS_SelectModel")
net.WriteString(m.uid)
net.SendToServer()
chat.AddText(Color(100, 255, 100), "[IGS] Модель выбрана: " .. m.name)
end
end
end)