add sborka

This commit is contained in:
2026-03-31 10:27:04 +03:00
commit f5e5f56c84
2345 changed files with 382127 additions and 0 deletions

View File

@@ -0,0 +1,146 @@
PLUGIN.name = "Меню выдачи предметов (SuperAdmin)"
PLUGIN.author = "RefoselTeamWork"
PLUGIN.description = "Adds a tab to the spawn menu which players can use to spawn items."
CAMI.RegisterPrivilege({
Name = "Helix - Выдача предметов",
MinAccess = "superadmin"
})
function PLUGIN:GetExpectedIcon(s)
local i = {
["Патроны"] = "icon16/tab.png"
}
return hook.Run("GetIconsForSpawnMenuItems", s) or i[s] or "icon16/folder.png"
end
if SERVER then
util.AddNetworkString("spawnmenuspawnitem")
util.AddNetworkString("spawnmenugiveitem")
ix.log.AddType("spawnmenuspawnitem", function(client, name) return string.format("%s has spawned \"%s\".", client:GetCharacter():GetName(), tostring(name)) end)
net.Receive("spawnmenuspawnitem", function(len, client)
local u = net.ReadString()
if not CAMI.PlayerHasAccess(client, "Helix - Выдача предметов", nil) then return end
for _, t in pairs(ix.item.list) do
if t.uniqueID == u then
ix.item.Spawn(t.uniqueID, client:GetShootPos() + client:GetAimVector() * 84 + Vector(0, 0, 16))
ix.log.Add(client, "spawnmenuspawnitem", t.name)
break
end
end
end)
net.Receive("spawnmenugiveitem", function(len, client)
local u = net.ReadString()
if not CAMI.PlayerHasAccess(client, "Helix - Выдача предметов", nil) then return end
for _, t in pairs(ix.item.list) do
if t.uniqueID == u then
local character = client:GetCharacter()
if not character then return end
local inventory = character:GetInventory()
if not inventory or isnumber(inventory) then
client:Notify("Inventory is still loading, please wait...")
return
end
inventory:Add(t.uniqueID)
ix.log.Add(client, "spawnmenuspawnitem", t.name)
client:Notify("You have given yourself a " .. t.name .. ". Check your inventory.")
break
end
end
end)
else
function PLUGIN:InitializedPlugins()
if SERVER then return end
RunConsoleCommand("spawnmenu_reload")
end
local PLUGIN = PLUGIN
spawnmenu.AddCreationTab("SuperAdmin - Выдача", function()
local p = vgui.Create("SpawnmenuContentPanel")
local t, n = p.ContentNavBar.Tree, p.OldSpawnlists
local l = {}
for uid, i in pairs(ix.item.list) do
local c = i.category
l[c] = l[c] or {}
table.insert(l[c], i)
end
for c, i in SortedPairs(l) do
local icon16 = PLUGIN:GetExpectedIcon(c)
local node = t:AddNode(L(c), icon16)
node.DoClick = function(self)
if self.PropPanel and IsValid(self.PropPanel) then
self.PropPanel:Remove()
self.PropPanel = nil
end
self.PropPanel = vgui.Create("ContentContainer", p)
self.PropPanel:SetVisible(false)
self.PropPanel:SetTriggerSpawnlistChange(false)
for _, t in SortedPairsByMemberValue(i, "name") do
spawnmenu.CreateContentIcon("item", self.PropPanel, {
nicename = (t.GetName and t:GetName()) or t.name,
spawnname = t.uniqueID,
})
end
p:SwitchPanel(self.PropPanel)
end
end
local FirstNode = t:Root():GetChildNode(0)
if IsValid(FirstNode) then
FirstNode:InternalDoClick()
end
return p
end, "icon16/cog_add.png", 201)
spawnmenu.AddContentType("item", function(p, data)
local n = data.nicename
local u = data.spawnname
local icon = vgui.Create("SpawnIcon", p)
icon:SetWide(64)
icon:SetTall(64)
icon:InvalidateLayout(true)
local t = ix.item.list
local i = t[u]
icon:SetModel((i.GetModel and i:GetModel()) or i.model)
icon:SetTooltip(n)
icon.OnMousePressed = function(this, code)
surface.PlaySound("ui/buttonclickrelease.wav")
if not CAMI.PlayerHasAccess(LocalPlayer(), "Helix - Выдача предметов", nil) then return end
if code == MOUSE_LEFT then
net.Start("spawnmenuspawnitem")
net.WriteString(u)
net.SendToServer()
elseif code == MOUSE_RIGHT then
net.Start("spawnmenugiveitem")
net.WriteString(u)
net.SendToServer()
end
end
icon:InvalidateLayout(true)
if IsValid(p) then
p:Add(icon)
end
return icon
end)
end