573 lines
18 KiB
Lua
573 lines
18 KiB
Lua
AddCSLuaFile()
|
|
|
|
if (SERVER) then
|
|
return
|
|
end
|
|
|
|
hook.Add("AddToolMenuCategories", "Mw_CustomCategory", function()
|
|
spawnmenu.AddToolCategory("Options", "mw_options", "MW Options")
|
|
end)
|
|
|
|
local comboBox = nil
|
|
|
|
local function addAnimList(panel)
|
|
if (IsValid(LocalPlayer():GetActiveWeapon()) && LocalPlayer():GetActiveWeapon().Animations != nil) then
|
|
if (comboBox != nil) then
|
|
comboBox:Remove()
|
|
end
|
|
|
|
comboBox = vgui.Create("DComboBox", panel)
|
|
|
|
for animName, a in pairs(LocalPlayer():GetActiveWeapon().Animations) do
|
|
comboBox:AddChoice(animName)
|
|
end
|
|
|
|
comboBox.OnSelect = function(self, index, value)
|
|
RunConsoleCommand("mgbase_debug_animdelta", "0")
|
|
timer.Simple(0.04, function()
|
|
LocalPlayer():GetActiveWeapon():PlayViewModelAnimation(value)
|
|
end)
|
|
end
|
|
|
|
panel:AddItem(comboBox)
|
|
RunConsoleCommand("mgbase_debug_animdelta", "0")
|
|
end
|
|
end
|
|
|
|
local function getRig()
|
|
local currentRig = GetConVar("mgbase_rig"):GetString()
|
|
|
|
if (MW_RIGS[currentRig] != nil) then
|
|
return currentRig
|
|
end
|
|
|
|
return "chands"
|
|
end
|
|
|
|
local function getGloves()
|
|
local currentGloves = GetConVar("mgbase_gloves"):GetString()
|
|
|
|
if (MW_GLOVES[currentGloves] != nil) then
|
|
return currentGloves
|
|
end
|
|
|
|
return ""
|
|
end
|
|
|
|
local function addGloveSkinControls(panel)
|
|
if (IsValid(panel.gloveSkinBox)) then
|
|
panel.gloveSkinBox:Remove()
|
|
end
|
|
|
|
if (IsValid(panel.gloveSkinLabel)) then
|
|
panel.gloveSkinLabel:Remove()
|
|
end
|
|
|
|
if (MW_GLOVES[getGloves()] == nil) then
|
|
return
|
|
end
|
|
|
|
panel.gloveSkinBox, panel.gloveSkinLabel = panel:ComboBox("Gloves Skin", "mgbase_gloves_skin")
|
|
|
|
--populate the combobox
|
|
for i, skin in SortedPairs(MW_GLOVES[getGloves()].Skins) do
|
|
panel.gloveSkinBox:AddChoice(skin, i - 1, GetConVar("mgbase_gloves_skin"):GetInt() == i - 1)
|
|
end
|
|
end
|
|
|
|
local function addGloveControls(panel)
|
|
if (IsValid(panel.gloveModelBox)) then
|
|
panel.gloveModelBox:Remove()
|
|
end
|
|
|
|
if (IsValid(panel.gloveModelLabel)) then
|
|
panel.gloveModelLabel:Remove()
|
|
end
|
|
|
|
if (IsValid(panel.gloveSkinBox)) then
|
|
panel.gloveSkinBox:Remove()
|
|
end
|
|
|
|
if (IsValid(panel.gloveSkinLabel)) then
|
|
panel.gloveSkinLabel:Remove()
|
|
end
|
|
|
|
if (getRig() == "chands") then
|
|
return
|
|
end
|
|
|
|
--MODEL
|
|
panel.gloveModelBox, panel.gloveModelLabel = panel:ComboBox("Gloves", "mgbase_gloves")
|
|
|
|
local oldSelect = panel.gloveModelBox.OnSelect
|
|
panel.gloveModelBox.OnSelect = function(cb, index, value, data)
|
|
oldSelect(cb, index, value, data)
|
|
RunConsoleCommand("mgbase_gloves_skin", "0")
|
|
|
|
timer.Simple(0, function()
|
|
addGloveSkinControls(panel)
|
|
end)
|
|
end
|
|
|
|
--populate the combobox
|
|
for cls, glove in SortedPairs(MW_GLOVES) do
|
|
panel.gloveModelBox:AddChoice(glove.Name, cls, getGloves() == cls)
|
|
end
|
|
|
|
--SKIN
|
|
addGloveSkinControls(panel)
|
|
end
|
|
|
|
local function addRigSkinControls(panel)
|
|
if (IsValid(panel.rigSkinBox)) then
|
|
panel.rigSkinBox:Remove()
|
|
end
|
|
|
|
if (IsValid(panel.rigSkinLabel)) then
|
|
panel.rigSkinLabel:Remove()
|
|
end
|
|
|
|
if (getRig() == "chands") then
|
|
return
|
|
end
|
|
|
|
panel.rigSkinBox, panel.rigSkinLabel = panel:ComboBox("Rig Skin", "mgbase_rig_skin")
|
|
|
|
--populate the combobox
|
|
for i, skin in SortedPairs(MW_RIGS[getRig()].Skins) do
|
|
panel.rigSkinBox:AddChoice(skin, i - 1, GetConVar("mgbase_rig_skin"):GetInt() == i - 1)
|
|
end
|
|
end
|
|
|
|
local function addRigControls(panel)
|
|
--RIG MODEL BOX
|
|
if (IsValid(panel.rigModelBox)) then
|
|
panel.rigModelBox:Remove()
|
|
end
|
|
|
|
if (IsValid(panel.rigModelLabel)) then
|
|
panel.rigMrigModelLabelodelBox:Remove()
|
|
end
|
|
|
|
panel.rigModelBox, panel.rigModelLabel = panel:ComboBox("Rig", "mgbase_rig")
|
|
panel.rigModelBox:AddChoice("C_Hands", "chands", getRig() == "chands")
|
|
|
|
--populate the combobox
|
|
for cls, rig in SortedPairs(MW_RIGS) do
|
|
panel.rigModelBox:AddChoice(rig.Name, cls, getRig() == cls)
|
|
end
|
|
|
|
local oldSelect = panel.rigModelBox.OnSelect
|
|
panel.rigModelBox.OnSelect = function(cb, index, value, data)
|
|
oldSelect(cb, index, value, data)
|
|
RunConsoleCommand("mgbase_rig_skin", "0")
|
|
|
|
timer.Simple(0, function()
|
|
addRigSkinControls(panel)
|
|
addGloveControls(panel)
|
|
end)
|
|
end
|
|
----
|
|
|
|
--RIG SKIN BOX
|
|
addRigSkinControls(panel)
|
|
|
|
--GLOVES
|
|
addGloveControls(panel)
|
|
end
|
|
|
|
local function addBinder(panel, text, convar)
|
|
local container = vgui.Create("DPanel", panel)
|
|
container:SetTall(30)
|
|
container:DockPadding(10, 2, 10, 2)
|
|
|
|
function container:Paint(w, h)
|
|
surface.SetDrawColor(250, 250, 250, 255)
|
|
self:DrawFilledRect()
|
|
end
|
|
|
|
local label = vgui.Create("DLabel", container)
|
|
label:SetText(text)
|
|
label:SetTextColor(Color(0, 0, 0, 255))
|
|
label:Dock(LEFT)
|
|
|
|
local binder = vgui.Create("DBinder", container)
|
|
binder:Dock(RIGHT)
|
|
binder:SetWide(100)
|
|
binder:SetValue(GetConVar(convar):GetInt())
|
|
function binder:OnChange(iNum)
|
|
GetConVar(convar):SetInt(iNum)
|
|
end
|
|
|
|
panel:AddItem(container)
|
|
end
|
|
|
|
hook.Add("PopulateToolMenu", "CustomMenuSettings", function()
|
|
spawnmenu.AddToolMenuOption("Options", "mw_options", "mw_vmodel", MWBLTL.Get("SpawnMenu_VM_Title"), "", "", function(panel)
|
|
panel:ClearControls()
|
|
|
|
panel:NumSlider(MWBLTL.Get("SpawnMenu_VM_Text1"), "mgbase_fx_vmfov", 0.5, 2, 2)
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_VM_Help1"))
|
|
|
|
panel:NumSlider(MWBLTL.Get("SpawnMenu_VM_Text2"), "mgbase_fx_vmfov_ads", 0.5, 2, 2)
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_VM_Help2"))
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_VM_Help3"))
|
|
|
|
local divider = vgui.Create("DHorizontalDivider")
|
|
panel:AddItem(divider)
|
|
|
|
panel:Help(MWBLTL.Get("SpawnMenu_VM_Help4"))
|
|
addRigControls(panel)
|
|
end)
|
|
|
|
spawnmenu.AddToolMenuOption("Options", "mw_options", "mw_fx", MWBLTL.Get("SpawnMenu_Effs_Title"), "", "", function(panel)
|
|
panel:ClearControls()
|
|
|
|
--panel:CheckBox("Barrel Smoke", "mgbase_fx_smoke")
|
|
--panel:ControlHelp("Toggle overheat smoke coming from the barrels.")
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_Effs_Text2"), "mgbase_fx_blur")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_Effs_Help2"))
|
|
end)
|
|
|
|
spawnmenu.AddToolMenuOption("Options", "mw_options", "mw_hud", MWBLTL.Get("SpawnMenu_HUD_Title"), "", "", function(panel)
|
|
panel:ClearControls()
|
|
|
|
panel:Help(MWBLTL.Get("SpawnMenu_HUD_Help1"))
|
|
|
|
local DermaColorCombo = vgui.Create("DColorCombo", panel)
|
|
DermaColorCombo:SetColor(string.ToColor(GetConVar("mgbase_hud_xhaircolor"):GetString()))
|
|
function DermaColorCombo:OnValueChanged(col)
|
|
RunConsoleCommand("mgbase_hud_xhaircolor", string.FromColor(col))
|
|
end
|
|
|
|
panel:AddItem(DermaColorCombo)
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_HUD_Text1"), "mgbase_hud_xhair")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_HUD_Help2"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_HUD_Text2"), "mgbase_hud_firemode")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_HUD_Help3"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_HUD_Text3"), "mgbase_hud_flashlight")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_HUD_Help4"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_HUD_Text4"), "mgbase_hud_sights")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_HUD_Help5"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_HUD_Text5"), "mgbase_fx_laser_weaponcolor")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_HUD_Help6"))
|
|
end)
|
|
|
|
spawnmenu.AddToolMenuOption("Options", "mw_options", "mw_controls", MWBLTL.Get("SpawnMenu_Cont_Title"), "", "", function(panel)
|
|
panel:ClearControls()
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_Cont_Text1"), "mgbase_toggleaim")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_Cont_Help1"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_Cont_Text2"), "mgbase_autoreload")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_Cont_Help2"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_Cont_Text3"), "mgbase_manualrechamber")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_Cont_Help3"))
|
|
|
|
--[[panel:Help("Customize Menu Bind")
|
|
local binder = vgui.Create("DBinder", panel)
|
|
binder:SetValue(input.GetKeyCode(input.LookupBinding("mgbase_customize")))
|
|
|
|
function binder:OnChange(num)
|
|
RunConsoleCommand("bind mgbase_customize "..input.LookupKeyBinding(num))
|
|
end
|
|
panel:AddItem(binder)
|
|
panel:ControlHelp("Once this is set, the menu won't show up when pressing the context menu key!")]] --doesn't work lol
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_Cont_Text4"), "mgbase_aimassist")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_Cont_Help6"))
|
|
|
|
local divider = vgui.Create("DPanel", panel)
|
|
divider:SetTall(4)
|
|
panel:AddItem(divider)
|
|
|
|
local method = math.Clamp(GetConVar("mgbase_presetspawnmethod"):GetInt(), 0, 3)
|
|
local combo, l = panel:ComboBox(MWBLTL.Get("SpawnMenu_Cont_Text5"), "mgbase_presetspawnmethod")
|
|
combo:SetWide(200)
|
|
combo:AddChoice(MWBLTL.Get("SpawnMenu_Cont_Text6"), 0, method == 0)
|
|
combo:AddChoice(MWBLTL.Get("SpawnMenu_Cont_Text7"), 1, method == 1)
|
|
combo:AddChoice(MWBLTL.Get("SpawnMenu_Cont_Text8"), 2, method == 2)
|
|
combo:AddChoice(MWBLTL.Get("SpawnMenu_Cont_Text9"), 3, method == 3)
|
|
|
|
--panel:Button(MWBLTL.Get("SpawnMenu_Cont_Text10"), "mgbase_customize")
|
|
|
|
divider = vgui.Create("DPanel", panel)
|
|
divider:SetTall(4)
|
|
panel:AddItem(divider)
|
|
|
|
addBinder(panel, "Melee", "mgbase_binds_melee")
|
|
addBinder(panel, "Low Carry", "mgbase_binds_safety")
|
|
addBinder(panel, "Switch Sights", "mgbase_binds_switchsights")
|
|
addBinder(panel, "Firemode", "mgbase_binds_firemode")
|
|
addBinder(panel, "Customize", "mgbase_binds_customize")
|
|
addBinder(panel, "Holster", "mgbase_binds_holster")
|
|
addBinder(panel, "Inspect", "mgbase_binds_inspect")
|
|
panel:ControlHelp("Press again while inspecting to stop animation.")
|
|
end)
|
|
|
|
spawnmenu.AddToolMenuOption("Options", "mw_options", "mw_debug", MWBLTL.Get("SpawnMenu_Debug_Title"), "", "", function(panel)
|
|
panel:ClearControls()
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_Debug_Text1"), "mgbase_debug_freeview")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_Debug_Help1"))
|
|
|
|
--[[panel:CheckBox(MWBLTL.Get("SpawnMenu_Debug_Text2"), "mgbase_debug_freezeanim")
|
|
panel:NumSlider(MWBLTL.Get("SpawnMenu_Debug_Help2"), "mgbase_debug_animdelta", 0, 1, 4)
|
|
|
|
local buttonToReloadAnims = vgui.Create("DButton", panel)
|
|
buttonToReloadAnims:SetText(MWBLTL.Get("SpawnMenu_Debug_Text3"))
|
|
buttonToReloadAnims.DoClick = function()
|
|
addAnimList(panel)
|
|
end
|
|
panel:AddItem(buttonToReloadAnims)]]
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_Debug_Text4"), "mgbase_debug_crosshair")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_Debug_Help3"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_Debug_Text5"), "mgbase_debug_disablebreathing")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_Debug_Help4"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_Debug_Text6"), "mgbase_debug_reverb")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_Debug_Help5"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_Debug_Text7"), "mgbase_debug_range")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_Debug_Help6"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_Debug_Text8"), "mgbase_debug_projectiles")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_Debug_Help7"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_Debug_Text9"), "mgbase_debug_vmrender")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_Debug_Help8"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_Debug_Text10"), "mgbase_debug_wmrender")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_Debug_Help9"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_Debug_Text11"), "mgbase_debug_mag")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_Debug_Help10"))
|
|
end)
|
|
|
|
spawnmenu.AddToolMenuOption("Options", "mw_options", "mw_svcontrols", MWBLTL.Get("SpawnMenu_SC_Title"), "", "", function(panel)
|
|
panel:ClearControls()
|
|
|
|
if (!LocalPlayer():IsAdmin()) then
|
|
panel:ControlHelp("shoo")
|
|
return
|
|
end
|
|
|
|
panel:NumSlider(MWBLTL.Get("SpawnMenu_SC_Text1"), "mgbase_sv_pvpdamage", 0, 5, 1)
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_SC_Help1"))
|
|
|
|
panel:NumSlider(MWBLTL.Get("SpawnMenu_SC_Text2"), "mgbase_sv_pvedamage", 0, 5, 1)
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_SC_Help2"))
|
|
|
|
panel:NumSlider(MWBLTL.Get("SpawnMenu_SC_Text3"), "mgbase_sv_recoil", 0, 5, 1)
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_SC_Help3"))
|
|
|
|
panel:NumSlider(MWBLTL.Get("SpawnMenu_SC_Text4"), "mgbase_sv_accuracy", 0.1, 5, 1)
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_SC_Help4"))
|
|
|
|
panel:NumSlider(MWBLTL.Get("SpawnMenu_SC_Text5"), "mgbase_sv_range", 1, 10, 1)
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_SC_Help5"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_SC_Text6"), "mgbase_sv_aimassist")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_SC_Help6"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_SC_Text7"), "mgbase_sv_breathing")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_SC_Help7"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_SC_Text8"), "mgbase_sv_customization")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_SC_Help8"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_SC_Text11"), "mgbase_sv_firstdraws")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_SC_Help11"))
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_SC_Text12"), "mgbase_sv_sprintreloads")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_SC_Help12"))
|
|
|
|
panel:CheckBox("Shoot Reloads", "mgbase_sv_shootreloads")
|
|
panel:ControlHelp("Allows firing to interrupt reloads.")
|
|
|
|
panel:CheckBox(MWBLTL.Get("SpawnMenu_SC_Text9"), "mgbase_sv_full_penetration")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_SC_Help9"))
|
|
|
|
panel:TextEntry(MWBLTL.Get("SpawnMenu_SC_Text10"), "mgbase_sv_customization_limit")
|
|
panel:ControlHelp(MWBLTL.Get("SpawnMenu_SC_Help10"))
|
|
end)
|
|
end)
|
|
|
|
local function createSpawnIcon(w, propPanel)
|
|
return spawnmenu.CreateContentIcon(w.ScriptedEntityType or "weapon", propPanel, {
|
|
nicename = w.PrintName or w.ClassName,
|
|
spawnname = w.ClassName,
|
|
material = w.IconOverride or "entities/" .. w.ClassName .. ".png",
|
|
admin = w.AdminOnly
|
|
})
|
|
end
|
|
|
|
--sub categories
|
|
hook.Add("PopulateWeapons", "AddWeaponContentMW19", function(pnlContent, tree, node)
|
|
timer.Simple(0, function()
|
|
local weaponsList = list.Get("Weapon")
|
|
local mgbaseWeapons = {}
|
|
|
|
--look into every weapon and see if they're from mgbase
|
|
for _, weapon in pairs(weaponsList) do
|
|
if (weapons.IsBasedOn(weapon.ClassName, "mg_base") || weapon.ClassName == "mw_infil_flare") then
|
|
if (mgbaseWeapons[weapon.Category] == nil) then
|
|
mgbaseWeapons[weapon.Category] = {}
|
|
end
|
|
|
|
--keep them for later if so
|
|
table.insert(mgbaseWeapons[weapon.Category], weapon)
|
|
end
|
|
end
|
|
|
|
--loop through all weapon categories
|
|
for _, categoryNode in pairs(tree:Root():GetChildNodes()) do
|
|
--if the text matches the categories we saved before we replace DoPopulate
|
|
if (mgbaseWeapons[categoryNode:GetText()] != nil) then
|
|
local manifest = {
|
|
["Other"] = {} --default header
|
|
}
|
|
|
|
--order them by subcategory
|
|
for _, weapon in pairs(mgbaseWeapons[categoryNode:GetText()]) do
|
|
--get weapon from storeds
|
|
local actualWeapon = weapons.Get(weapon.ClassName)
|
|
|
|
if (actualWeapon.SubCategory == nil) then
|
|
table.insert(manifest["Other"], weapon)
|
|
else
|
|
if (manifest[actualWeapon.SubCategory] == nil) then
|
|
manifest[actualWeapon.SubCategory] = {}
|
|
end
|
|
table.insert(manifest[actualWeapon.SubCategory], weapon)
|
|
end
|
|
end
|
|
|
|
categoryNode.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 categoryName, weps in SortedPairs(manifest) do
|
|
if (#weps <= 0) then
|
|
continue
|
|
end
|
|
|
|
--create header
|
|
local label = vgui.Create("ContentHeader", container)
|
|
label:SetText(categoryName)
|
|
|
|
self.PropPanel:Add(label)
|
|
|
|
--this is copy from gmod
|
|
for _, ent in SortedPairsByMemberValue(weps, "PrintName") do
|
|
local icon = createSpawnIcon(ent, self.PropPanel)
|
|
local oldPaint = icon.Paint
|
|
local we = weapons.Get(ent.ClassName)
|
|
local bPossibleBlueprint = we.Base != "mg_base"
|
|
|
|
if (bPossibleBlueprint) then
|
|
icon.DoClick = function()
|
|
RunConsoleCommand("gm_giveswep", ent.ClassName)
|
|
surface.PlaySound(we.BlueprintSound || "mw/user_interface/aar/ui_aar_operator_complete_reveal.wav")
|
|
end
|
|
end
|
|
|
|
icon.Paint = function(self, aWide, aTall)
|
|
if (bPossibleBlueprint) then
|
|
blueprintIconPaint(self, aWide, aTall)
|
|
end
|
|
oldPaint(self, aWide, aTall)
|
|
end
|
|
|
|
local oldMenuExtra = icon.OpenMenuExtra
|
|
icon.OpenMenuExtra = function(icon, menu)
|
|
oldMenuExtra(icon, menu)
|
|
local weaponsBasedOnMe = {}
|
|
|
|
--blueprints
|
|
for _, w in pairs(weaponsList) do
|
|
if (weapons.IsBasedOn(w.ClassName, ent.ClassName)) then
|
|
weaponsBasedOnMe[#weaponsBasedOnMe + 1] = w
|
|
end
|
|
end
|
|
|
|
if (#weaponsBasedOnMe > 0) then
|
|
menu:AddSpacer()
|
|
|
|
local grid = vgui.Create("DGrid")
|
|
grid:SetCols(math.min(#weaponsBasedOnMe, 3))
|
|
grid:SetColWide(icon:GetWide())
|
|
grid:SetRowHeight(icon:GetTall())
|
|
|
|
for _, w in pairs(weaponsBasedOnMe) do
|
|
local we = weapons.Get(w.ClassName)
|
|
local subIcon = createSpawnIcon(w, menu)
|
|
local oldPaint = subIcon.Paint
|
|
subIcon.Paint = function(self, aWide, aTall)
|
|
blueprintIconPaint(self, aWide, aTall)
|
|
oldPaint(self, aWide, aTall)
|
|
end
|
|
|
|
subIcon.DoClick = function()
|
|
RunConsoleCommand("gm_giveswep", w.ClassName)
|
|
surface.PlaySound(we.BlueprintSound || "mw/user_interface/aar/ui_aar_operator_complete_reveal.wav")
|
|
end
|
|
|
|
subIcon.DoRightClick = function() end
|
|
|
|
grid:AddItem(subIcon)
|
|
end
|
|
|
|
menu:AddPanel(grid)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end) --timer simple
|
|
end)
|
|
|
|
local specialMat = Material("gui/ps_hover.png")
|
|
local glowMat = Material("particles/fire_glow")
|
|
function blueprintIconPaint(self, aWide, aTall)
|
|
if (self.nextGlowSpawn == nil || CurTime() > self.nextGlowSpawn) then
|
|
if (self.glows == nil) then
|
|
self.glows = {}
|
|
end
|
|
|
|
table.insert(self.glows, {delta = 1, speed = math.random(30, 60), size = math.random(12, 24), x = math.random(6, aWide - 6), y = aWide - 16})
|
|
self.nextGlowSpawn = CurTime() + math.random(0.3, 0.5)
|
|
end
|
|
|
|
surface.SetMaterial(glowMat)
|
|
for i, glow in pairs(self.glows) do
|
|
glow.delta = glow.delta - FrameTime()
|
|
glow.y = glow.y - (glow.speed * FrameTime())
|
|
surface.SetDrawColor(255, 255, 255, math.sin(math.pi * glow.delta) * 255)
|
|
surface.DrawTexturedRectRotated(glow.x, glow.y, glow.size, glow.size, CurTime() + glow.size + glow.speed)
|
|
|
|
if (glow.delta <= 0) then
|
|
table.remove(self.glows, i)
|
|
end
|
|
end
|
|
|
|
--surface.SetDrawColor(255, 255, 255, 255)
|
|
--surface.SetMaterial(specialMat)
|
|
--self:DrawTexturedRect()
|
|
end |