mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
167
lua/arccw/client/cl_uc_menu.lua
Normal file
167
lua/arccw/client/cl_uc_menu.lua
Normal file
@@ -0,0 +1,167 @@
|
||||
--[[
|
||||
| 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)
|
||||
Reference in New Issue
Block a user