147 lines
4.8 KiB
Lua
147 lines
4.8 KiB
Lua
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
|