Files
wnsrc/lua/arccw/client/cl_uc_menu.lua
lifestorm 9c918c46e5 Upload
2024-08-04 23:12:27 +03:00

168 lines
5.6 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local function DoGenericSpawnmenuRightclickMenu(self)
local clickmenu = DermaMenu()
clickmenu:AddOption("#spawnmenu.menu.copy", function()
SetClipboardText(self:GetSpawnName())
end):SetIcon("icon16/page_copy.png")
if isfunction(self.OpenMenuExtra) then
self:OpenMenuExtra(clickmenu)
end
clickmenu:Open()
end
CreateClientConVar("arccw_uc_menu", 1, true, false, "Cool menu!", 0, 1) -- extra safety cause people say it not work
hook.Add( "PopulateWeapons", "UC_AddWeaponContent", function( pnlContent, tree, node )
if !GetConVar("arccw_uc_menu"):GetBool() then return end
local AllUCWeapons = {}
local AllUCWeaponsByPack = {}
for classname, _ in pairs( weapons.GetList() ) do
local wep = weapons.Get(_.ClassName)
if wep.Spawnable and wep.Category == "ArcCW - Urban Coalition" then
AllUCWeapons[_.ClassName] = wep
end
end
for classname, weapondata in pairs( AllUCWeapons ) do
local pack = weapondata.UC_CategoryPack or "_Unknown"
if pack then
if !AllUCWeaponsByPack[pack] then AllUCWeaponsByPack[pack] = {} end
table.insert(AllUCWeaponsByPack[pack], classname)
end
end
-- PrintTable(AllUCWeapons)
-- PrintTable(AllUCWeaponsByPack)
local NodeToUse = nil
-- MW base devs, I tried to recreate this spawnmenu stuff without looking at the code for yours
-- BUT I WAS FUCKING BAWLING MY EYES OUT TRYING TO GET HOW TO DO THIS NEXT LINE
-- anyways you guys probably are not reading this so i will end it here thank you
-- ( i had the idea to do this kinda shit like. 2 days before smgs were pushed. i'm fucking crying i crode 😭😭😭 )
for _, UCNode in pairs(tree:Root():GetChildNodes()) do
if UCNode:GetText() == "ArcCW - Urban Coalition" then
NodeToUse = UCNode
break
end
end
if !NodeToUse then return end
NodeToUse.DoPopulate = function(self)
-- If we've already populated it - forget it.
if (self.PropPanel) then return end
-- Create the container panel
self.PropPanel = vgui.Create("ContentContainer", pnlContent)
self.PropPanel:SetVisible(false)
self.PropPanel:SetTriggerSpawnlistChange(false)
for pack, class in SortedPairs( AllUCWeaponsByPack ) do
local label = vgui.Create("ContentHeader", NodeToUse)
label:SetText( string.Right( pack, #pack-1 ) )
self.PropPanel:Add(label)
local alphabeticallist = {}
for _, k in pairs(class) do table.insert(alphabeticallist, {AllUCWeapons[k], PrintName = AllUCWeapons[k].PrintName}) end
for k, e in SortedPairsByMemberValue( alphabeticallist, "PrintName" ) do
local ent = e[1]
CreateUCWeapon( self.PropPanel, {
nicename = ent.PrintName or ent.ClassName,
spawnname = ent.ClassName,
material = ent.IconOverride or "entities/" .. ent.ClassName .. ".png",
admin = ent.AdminOnly,
uc_manu = ent.Trivia_Manufacturer,
uc_year = ent.Trivia_Year,
uc_cali = ent.Trivia_Calibre,
} )
end
end
end
-- InternalDoClick is called on the first child node before our function override.
-- Remove its results and regenerate our cool tab
if tree:Root():GetChildNode(0) == NodeToUse then
NodeToUse.PropPanel:Remove()
NodeToUse.PropPanel = nil
NodeToUse:InternalDoClick()
end
end )
function CreateUCWeapon(container, obj)
if !obj.material then return end
if !obj.nicename then return end
if !obj.spawnname then return end
local icon = vgui.Create("UCWepSel", container)
icon:SetContentType("weapon")
icon:SetSpawnName(obj.spawnname)
icon:SetName(obj.nicename, obj.spawnname, {
manu = obj.uc_manu,
year = obj.uc_year,
cali = obj.uc_cali
})
icon:SetMaterial(obj.material)
icon:SetAdminOnly(obj.admin)
icon:SetColor(Color(135, 206, 250, 255))
icon.DoClick = function()
RunConsoleCommand("gm_giveswep", obj.spawnname)
surface.PlaySound("ui/buttonclickrelease.wav")
end
icon.DoMiddleClick = function()
RunConsoleCommand("gm_spawnswep", obj.spawnname)
surface.PlaySound("ui/buttonclickrelease.wav")
end
icon.OpenMenuExtra = function(self, menu)
menu:AddOption("#spawnmenu.menu.spawn_with_toolgun", function()
RunConsoleCommand("gmod_tool", "creator")
RunConsoleCommand("creator_type", "3")
RunConsoleCommand("creator_name", obj.spawnname)
end):SetIcon("icon16/brick_add.png")
local opt = menu:AddOption("#spawnmenu.menu.use_as_npc_gun", function()
RunConsoleCommand("gmod_npcweapon", self:GetSpawnName())
end)
if self:GetSpawnName() == GetConVar("gmod_npcweapon"):GetString() then
opt:SetIcon("icon16/monkey_tick.png")
else
opt:SetIcon("icon16/monkey.png")
end
end
icon.OpenMenu = DoGenericSpawnmenuRightclickMenu
if IsValid(container) then
container:Add(icon)
end
return icon
end
-- fixed
-- timer.Simple(2, function()
-- ArcCW.IncompatibleAddons["2654687324"] = "Prevents Urban Decay's M16 from properly loading."
-- end)