mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
168 lines
5.6 KiB
Lua
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)
|