diff --git a/gamemodes/benny/entities/weapons/benny/sh_inv.lua b/gamemodes/benny/entities/weapons/benny/sh_inv.lua index dbdcab7..e140c18 100644 --- a/gamemodes/benny/entities/weapons/benny/sh_inv.lua +++ b/gamemodes/benny/entities/weapons/benny/sh_inv.lua @@ -75,7 +75,7 @@ function SWEP:BDeploy( hand, id ) local inv = p:INV_Get() local item = inv[id] - local class = WEAPONS[item.Class] + local class = WeaponGet(item.Class) assert( item, "That item doesn't exist. " .. tostring(item) ) @@ -102,7 +102,7 @@ function SWEP:BHolster( hand ) local p = self:GetOwner() local item = self:BTable( hand ) if item then - local class = WEAPONS[item.Class] + local class = WeaponGet(item.Class) if class.Custom_Holster then class.Custom_Holster( self, item, class, hand ) end end diff --git a/gamemodes/benny/gamemode/modules/gui/cl_debuginv.lua b/gamemodes/benny/gamemode/modules/gui/cl_debuginv.lua index ad77b4a..e0b1273 100644 --- a/gamemodes/benny/gamemode/modules/gui/cl_debuginv.lua +++ b/gamemodes/benny/gamemode/modules/gui/cl_debuginv.lua @@ -1,2 +1,156 @@ --- Dev inventory \ No newline at end of file +-- Dev inventory + +local function regen_items( itemlist ) + local ply = LocalPlayer() + local inv = ply:INV_Get() + local active = GetConVar("benny_hud_tempactive"):GetString() + itemlist:Clear() + + local maidlist = {} + local catesmade = {} + + for i, v in pairs( ply:INV_ListFromBuckets() ) do + local class = inv[v].Class + local Class = WeaponGet(class) + + if !catesmade[Class.Type] then + catesmade[Class.Type] = true + local cate = vgui.Create( "DButton" ) + itemlist:AddItem( cate ) + cate:SetSize( 1, ss(12) ) + cate:Dock( TOP ) + cate:DockMargin( 0, 0, 0, ss(2) ) + + cate.Text_Name = Class.Type + + function cate:Paint( w, h ) + surface.SetDrawColor( schemes[active]["bg"] ) + surface.DrawRect( 0, 0, w, h ) + surface.SetDrawColor( schemes[active]["fg"] ) + surface.DrawOutlinedRect( 0, 0, w, h, ss(0.5) ) + + surface.SetTextColor( schemes[active]["fg"] ) + surface.SetFont( "Benny_10" ) + surface.SetTextPos( ss(2), ss(2) ) + surface.DrawText( self.Text_Name ) + + return true + end + end + + local button = vgui.Create( "DButton" ) + itemlist:AddItem( button ) + button:SetSize( 1, ss(24) ) + button:Dock( TOP ) + button:DockMargin( 0, 0, 0, ss(2) ) + + button.ID = v + + local mag = false + if class:Left( 4 ) == "mag_" then + mag = true + button:SetTall( ss(11) ) + end + + if !maidlist[class] then + maidlist[class] = table.Flip( ply:INV_Find( class ) ) + end + local ml = maidlist[class] + + button.Text_Name = Class.Name + button.Text_Desc = Class.Description + button.Text_ID = "[" .. ml[v] .. "] " .. button.ID + + -- PROTO: These functions don't need to be remade over and over like this. + function button:DoClick() + local Menu = DermaMenu() + + local opt1 = Menu:AddOption( "Equip Right", function() + RunConsoleCommand( "benny_inv_equip", button.ID, "false" ) + end) + opt1:SetIcon( "icon16/resultset_last.png" ) + + local opt3 = Menu:AddOption( "Equip Right, Move Left", function() + RunConsoleCommand( "benny_inv_equip", button.ID, "false", "true" ) + end) + opt3:SetIcon( "icon16/resultset_next.png" ) + + Menu:AddSpacer() + + local opt2 = Menu:AddOption( "Equip Left", function() + RunConsoleCommand( "benny_inv_equip", button.ID, "true" ) + end) + opt2:SetIcon( "icon16/resultset_first.png" ) + + local opt4 = Menu:AddOption( "Equip Left, Move Right", function() + RunConsoleCommand( "benny_inv_equip", button.ID, "true", "true" ) + end) + opt4:SetIcon( "icon16/resultset_previous.png" ) + + Menu:AddSpacer() + + local opt5 = Menu:AddOption( "Holster", function() + RunConsoleCommand( "benny_inv_holster", button.ID ) + end) + opt5:SetIcon( "icon16/control_pause_blue.png" ) + + local opt6 = Menu:AddOption( "Discard", function() + RunConsoleCommand("benny_inv_discard", button.ID) + self:Remove() + end) + opt6:SetIcon( "icon16/bin.png" ) + + Menu:Open() + -- timer.Simple( 0.1, function() if IsValid( itemlist ) then regen_items( itemlist ) end end ) + end + + button.DoRightClick = function( self ) + RunConsoleCommand("benny_inv_discard", button.ID) + self:Remove() + end + + function button:Paint( w, h ) + surface.SetDrawColor( schemes[active]["fg"] ) + surface.DrawRect( 0, 0, w, h ) + + surface.SetTextColor( schemes[active]["bg"] ) + + surface.SetFont( !mag and "Benny_16" or "Benny_10" ) + surface.SetTextPos( ss(2), ss(2) ) + surface.DrawText( self.Text_Name ) + + if !mag then + surface.SetFont( "Benny_12" ) + surface.SetTextPos( ss(2), ss(2 + 11) ) + surface.DrawText( self.Text_Desc ) + end + + surface.SetFont( "Benny_10" ) + local tx = surface.GetTextSize( self.Text_ID ) + surface.SetTextPos( w - ss(2) - tx, ss(2) ) + surface.DrawText( self.Text_ID ) + return true + end + end +end +concommand.Add("benny_debug_inv", function() + if IsValid( base ) then base:Remove() end + base = vgui.Create("DFrame") + base:SetSize( ss(400), ss(400) ) + base:MakePopup() + base:SetKeyboardInputEnabled( false ) + base:Center() + local active = GetConVar("benny_hud_tempactive"):GetString() + + function base:Paint( w, h ) + surface.SetDrawColor( schemes[active]["bg"] ) + surface.DrawRect( 0, 0, w, h ) + return true + end + + local itemlist = base:Add("DScrollPanel") + itemlist:Dock( FILL ) + + regen_items( itemlist ) +end) \ No newline at end of file diff --git a/gamemodes/benny/gamemode/modules/gui/cl_spawnmenu.lua b/gamemodes/benny/gamemode/modules/gui/cl_spawnmenu.lua index 722ef9e..1440526 100644 --- a/gamemodes/benny/gamemode/modules/gui/cl_spawnmenu.lua +++ b/gamemodes/benny/gamemode/modules/gui/cl_spawnmenu.lua @@ -1,2 +1,93 @@ --- Dev spawnmenu \ No newline at end of file +-- Dev spawnmenu + +function GM:OnSpawnMenuOpen() + RunConsoleCommand( "benny_debug_inv" ) +end +function GM:OnSpawnMenuClose() + if IsValid( base ) then base:Remove() end +end + +function OpenSMenu() + if IsValid( smenu ) then smenu:Remove() return end + local active = GetConVar("benny_hud_tempactive"):GetString() + smenu = vgui.Create("DFrame") + smenu:SetSize( ss(1+(96+2)*4), ss(360) ) + smenu:MakePopup() + smenu:SetKeyboardInputEnabled( false ) + smenu:Center() + + function smenu:Paint( w, h ) + surface.SetDrawColor( schemes[active]["bg"] ) + surface.DrawRect( 0, 0, w, h ) + return true + end + + local itemlist = smenu:Add("DScrollPanel") + itemlist:Dock( FILL ) + + -- local List = vgui.Create( "DIconLayout", itemlist ) + -- List:Dock( FILL ) + -- List:SetSpaceX( 5 ) + -- List:SetSpaceY( 5 ) + + + local createlist = {} + + for ClassName, Class in pairs( WEAPONS ) do + if !createlist[Class.Type] then + createlist[Class.Type] = {} + end + + table.insert( createlist[Class.Type], { ClassName = ClassName, Class = Class } ) + end + + for i, v in SortedPairs( createlist ) do + local Collapse = itemlist:Add( "DCollapsibleCategory" ) + Collapse:Dock( TOP ) + Collapse:SetLabel( i ) + local Lays = itemlist:Add( "DIconLayout" ) + Collapse:SetContents( Lays ) + Collapse:SetExpanded( i!="magazine" ) + Lays:Dock( FILL ) + Lays:SetSpaceX( ss(1) ) + Lays:SetSpaceY( ss(1) ) + for Mew, New in ipairs( v ) do + local button = Lays:Add( "DButton" ) + button:SetSize( ss(95), ss(14) ) + --button:Dock( TOP ) + button:DockMargin( 0, 0, 0, ss(4) ) + + button.Text_Name = New.Class.Name + button.Text_Desc = New.Class.Description + + -- PROTO: These functions don't need to be remade over and over like this. + function button:DoClick() + RunConsoleCommand( "benny_debug_give", New.ClassName ) + chat.AddText( "Gave " .. New.Class.Name ) + end + + function button:DoRightClick() + RunConsoleCommand( "benny_debug_give", "mag_" .. New.ClassName ) + chat.AddText( "Gave " .. WeaponGet("mag_"..New.ClassName).Name ) + end + + function button:Paint( w, h ) + surface.SetDrawColor( schemes[active]["fg"] ) + surface.DrawRect( 0, 0, w, h ) + + surface.SetTextColor( schemes[active]["bg"] ) + + surface.SetFont( "Benny_12" ) + surface.SetTextPos( ss(2), ss(2) ) + surface.DrawText( self.Text_Name ) + + -- surface.SetFont( "Benny_10" ) + -- surface.SetTextPos( ss(4), ss(4 + 12) ) + -- surface.DrawText( self.Text_Desc ) + return true + end + end + end + +end \ No newline at end of file diff --git a/gamemodes/benny/gamemode/modules/player/cl_hud.lua b/gamemodes/benny/gamemode/modules/player/cl_hud.lua index be97209..a135c94 100644 --- a/gamemodes/benny/gamemode/modules/player/cl_hud.lua +++ b/gamemodes/benny/gamemode/modules/player/cl_hud.lua @@ -520,7 +520,7 @@ hook.Add( "HUDPaint", "Benny_HUDPaint", function() surface.DrawOutlinedRect( m_x + bb - chunk, m_y + bb, m_w - b2, m_h - b2, ss( 0.5 ) ) local s1 = (m_h - b2 - b2) - local s2 = (m_h - b2 - b2) * (inv[tag] and ( inv[tag].Ammo / WEAPONS[inv[tag].Class].Ammo ) or 8) + local s2 = (m_h - b2 - b2) * (inv[tag] and ( inv[tag].Ammo / WeaponGet(inv[tag].Class).Ammo ) or 8) local s3 = math.floor( s2 - s1 ) local m1, m2, m3, m4 = m_x + bb + bb - chunk, m_y + bb + bb - s3, m_w - b2 - b2, s2 @@ -681,7 +681,7 @@ hook.Add( "HUDPaint", "Benny_HUDPaint", function() bump = bump + (nextwe_no) else for d, item in ipairs( bucket ) do - local idata = WEAPONS[inv[item].Class] + local idata = WeaponGet(inv[item].Class) local sel = item==wep:D_GetID( false )--d==item_selected surface.SetDrawColor( scheme["bg"] ) surface.DrawRect( bump + Wb, (item_start+ybump) + Hb, size_textx, (sel and size_texty_sel or size_texty) ) diff --git a/gamemodes/benny/gamemode/modules/player/sh_basic.lua b/gamemodes/benny/gamemode/modules/player/sh_basic.lua index 66f7dbe..a57f107 100644 --- a/gamemodes/benny/gamemode/modules/player/sh_basic.lua +++ b/gamemodes/benny/gamemode/modules/player/sh_basic.lua @@ -10,7 +10,7 @@ concommand.Add("benny_debug_give", function(ply, cmd, args) local inv = ply:INV_Get() local str = UUID_generate() - local class = WEAPONS[args[1]] + local class = WeaponGet(args[1]) assert(class, "Invalid Class.") @@ -190,249 +190,4 @@ function GM:ShowSpare2( ply ) if SERVER then ply:ConCommand( "benny_gui_spscore" ) end -end - --- Debug inv -if CLIENT then - function GM:OnSpawnMenuOpen() - RunConsoleCommand( "benny_debug_inv" ) - end - function GM:OnSpawnMenuClose() - if IsValid( base ) then base:Remove() end - end - - function OpenSMenu() - if IsValid( smenu ) then smenu:Remove() return end - local active = GetConVar("benny_hud_tempactive"):GetString() - smenu = vgui.Create("DFrame") - smenu:SetSize( ss(1+(96+2)*4), ss(360) ) - smenu:MakePopup() - smenu:SetKeyboardInputEnabled( false ) - smenu:Center() - - function smenu:Paint( w, h ) - surface.SetDrawColor( schemes[active]["bg"] ) - surface.DrawRect( 0, 0, w, h ) - return true - end - - local itemlist = smenu:Add("DScrollPanel") - itemlist:Dock( FILL ) - - -- local List = vgui.Create( "DIconLayout", itemlist ) - -- List:Dock( FILL ) - -- List:SetSpaceX( 5 ) - -- List:SetSpaceY( 5 ) - - - local createlist = {} - - for ClassName, Class in pairs( WEAPONS ) do - if !createlist[Class.Type] then - createlist[Class.Type] = {} - end - - table.insert( createlist[Class.Type], { ClassName = ClassName, Class = Class } ) - end - - for i, v in SortedPairs( createlist ) do - local Collapse = itemlist:Add( "DCollapsibleCategory" ) - Collapse:Dock( TOP ) - Collapse:SetLabel( i ) - local Lays = itemlist:Add( "DIconLayout" ) - Collapse:SetContents( Lays ) - Collapse:SetExpanded( i!="magazine" ) - Lays:Dock( FILL ) - Lays:SetSpaceX( ss(1) ) - Lays:SetSpaceY( ss(1) ) - for Mew, New in ipairs( v ) do - local button = Lays:Add( "DButton" ) - button:SetSize( ss(95), ss(14) ) - --button:Dock( TOP ) - button:DockMargin( 0, 0, 0, ss(4) ) - - button.Text_Name = New.Class.Name - button.Text_Desc = New.Class.Description - - -- PROTO: These functions don't need to be remade over and over like this. - function button:DoClick() - RunConsoleCommand( "benny_debug_give", New.ClassName ) - end - - function button:DoRightClick() - RunConsoleCommand( "benny_debug_give", "mag_" .. New.ClassName ) - end - - function button:Paint( w, h ) - surface.SetDrawColor( schemes[active]["fg"] ) - surface.DrawRect( 0, 0, w, h ) - - surface.SetTextColor( schemes[active]["bg"] ) - - surface.SetFont( "Benny_12" ) - surface.SetTextPos( ss(2), ss(2) ) - surface.DrawText( self.Text_Name ) - - -- surface.SetFont( "Benny_10" ) - -- surface.SetTextPos( ss(4), ss(4 + 12) ) - -- surface.DrawText( self.Text_Desc ) - return true - end - end - end - - end - local function regen_items( itemlist ) - local ply = LocalPlayer() - local inv = ply:INV_Get() - local active = GetConVar("benny_hud_tempactive"):GetString() - itemlist:Clear() - - local maidlist = {} - local catesmade = {} - - for i, v in pairs( ply:INV_ListFromBuckets() ) do - local class = inv[v].Class - local Class = WEAPONS[class] - - if !catesmade[Class.Type] then - catesmade[Class.Type] = true - local cate = vgui.Create( "DButton" ) - itemlist:AddItem( cate ) - cate:SetSize( 1, ss(12) ) - cate:Dock( TOP ) - cate:DockMargin( 0, 0, 0, ss(2) ) - - cate.Text_Name = Class.Type - - function cate:Paint( w, h ) - surface.SetDrawColor( schemes[active]["bg"] ) - surface.DrawRect( 0, 0, w, h ) - surface.SetDrawColor( schemes[active]["fg"] ) - surface.DrawOutlinedRect( 0, 0, w, h, ss(0.5) ) - - surface.SetTextColor( schemes[active]["fg"] ) - surface.SetFont( "Benny_10" ) - surface.SetTextPos( ss(2), ss(2) ) - surface.DrawText( self.Text_Name ) - - return true - end - end - - local button = vgui.Create( "DButton" ) - itemlist:AddItem( button ) - button:SetSize( 1, ss(24) ) - button:Dock( TOP ) - button:DockMargin( 0, 0, 0, ss(2) ) - - button.ID = v - - local mag = false - if class:Left( 4 ) == "mag_" then - mag = true - button:SetTall( ss(11) ) - end - - if !maidlist[class] then - maidlist[class] = table.Flip( ply:INV_Find( class ) ) - end - local ml = maidlist[class] - - button.Text_Name = Class.Name - button.Text_Desc = Class.Description - button.Text_ID = "[" .. ml[v] .. "] " .. button.ID - - -- PROTO: These functions don't need to be remade over and over like this. - function button:DoClick() - local Menu = DermaMenu() - - local opt1 = Menu:AddOption( "Equip Right", function() - RunConsoleCommand( "benny_inv_equip", button.ID, "false" ) - end) - opt1:SetIcon( "icon16/resultset_last.png" ) - - local opt3 = Menu:AddOption( "Equip Right, Move Left", function() - RunConsoleCommand( "benny_inv_equip", button.ID, "false", "true" ) - end) - opt3:SetIcon( "icon16/resultset_next.png" ) - - Menu:AddSpacer() - - local opt2 = Menu:AddOption( "Equip Left", function() - RunConsoleCommand( "benny_inv_equip", button.ID, "true" ) - end) - opt2:SetIcon( "icon16/resultset_first.png" ) - - local opt4 = Menu:AddOption( "Equip Left, Move Right", function() - RunConsoleCommand( "benny_inv_equip", button.ID, "true", "true" ) - end) - opt4:SetIcon( "icon16/resultset_previous.png" ) - - Menu:AddSpacer() - - local opt5 = Menu:AddOption( "Holster", function() - RunConsoleCommand( "benny_inv_holster", button.ID ) - end) - opt5:SetIcon( "icon16/control_pause_blue.png" ) - - local opt6 = Menu:AddOption( "Discard", function() - RunConsoleCommand("benny_inv_discard", button.ID) - self:Remove() - end) - opt6:SetIcon( "icon16/bin.png" ) - - Menu:Open() - -- timer.Simple( 0.1, function() if IsValid( itemlist ) then regen_items( itemlist ) end end ) - end - - button.DoRightClick = function( self ) - RunConsoleCommand("benny_inv_discard", button.ID) - self:Remove() - end - - function button:Paint( w, h ) - surface.SetDrawColor( schemes[active]["fg"] ) - surface.DrawRect( 0, 0, w, h ) - - surface.SetTextColor( schemes[active]["bg"] ) - - surface.SetFont( !mag and "Benny_16" or "Benny_10" ) - surface.SetTextPos( ss(2), ss(2) ) - surface.DrawText( self.Text_Name ) - - if !mag then - surface.SetFont( "Benny_12" ) - surface.SetTextPos( ss(2), ss(2 + 11) ) - surface.DrawText( self.Text_Desc ) - end - - surface.SetFont( "Benny_10" ) - local tx = surface.GetTextSize( self.Text_ID ) - surface.SetTextPos( w - ss(2) - tx, ss(2) ) - surface.DrawText( self.Text_ID ) - return true - end - end - end - concommand.Add("benny_debug_inv", function() - if IsValid( base ) then base:Remove() end - base = vgui.Create("DFrame") - base:SetSize( ss(400), ss(400) ) - base:MakePopup() - base:SetKeyboardInputEnabled( false ) - base:Center() - local active = GetConVar("benny_hud_tempactive"):GetString() - - function base:Paint( w, h ) - surface.SetDrawColor( schemes[active]["bg"] ) - surface.DrawRect( 0, 0, w, h ) - return true - end - - local itemlist = base:Add("DScrollPanel") - itemlist:Dock( FILL ) - - regen_items( itemlist ) - end) end \ No newline at end of file diff --git a/gamemodes/benny/gamemode/modules/player/sh_player.lua b/gamemodes/benny/gamemode/modules/player/sh_player.lua index b2becd8..adb9c98 100644 --- a/gamemodes/benny/gamemode/modules/player/sh_player.lua +++ b/gamemodes/benny/gamemode/modules/player/sh_player.lua @@ -139,7 +139,7 @@ do for i, bucket in ipairs( inventorylist ) do local temp = {} for id, data in pairs( inv ) do - local idata = WEAPONS[data.Class] + local idata = WeaponGet(data.Class) local translated = translat[idata.Type] if i == translated[1] then diff --git a/gamemodes/benny/gamemode/modules/weapons/sh_weapons.lua b/gamemodes/benny/gamemode/modules/weapons/sh_weapons.lua index ad1bb2e..b7aa375 100644 --- a/gamemodes/benny/gamemode/modules/weapons/sh_weapons.lua +++ b/gamemodes/benny/gamemode/modules/weapons/sh_weapons.lua @@ -11,6 +11,10 @@ FIREMODE_SEMI = { } WEAPONS = {} +function WeaponGet( classname ) + return WEAPONS[ classname ] +end + AddSound( "1911.Fire", { "benny/weapons/1911/01.ogg", "benny/weapons/1911/02.ogg", @@ -887,7 +891,7 @@ do -- Grenades, nothing here is guaranteed. local function GrenadeCreate( self, data ) -- PROTO: See to getting this done better. Maybe it's spawned while priming the nade for low CL-SV/phys delay? local p = self:GetOwner() - local class = WEAPONS[data.Class] + local class = WeaponGet(data.Class) local GENT = ents.Create( class.GrenadeEnt ) GENT:SetOwner( p ) local ang = p:EyeAngles() @@ -906,7 +910,7 @@ do -- Grenades, nothing here is guaranteed. local function GrenadeThrow( self, data ) local p = self:GetOwner() - local class = WEAPONS[data.Class] + local class = WeaponGet(data.Class) self:SetGrenadeDown( false ) -- TEMP: Do this right! if !class.GrenadeCharge then self:SetGrenadeDownStart( CurTime() ) end @@ -929,7 +933,7 @@ do -- Grenades, nothing here is guaranteed. local function GrenadeThink( self, data ) local p = self:GetOwner() - local class = WEAPONS[data.Class] + local class = WeaponGet(data.Class) if self:GetGrenadeDown() then if true or ( CurTime() >= (self:GetGrenadeDownStart() + class.GrenadeFuse) ) then GrenadeThrow( self, data )