From 5c17a6d645de622c2aba285913f2210bc2642b53 Mon Sep 17 00:00:00 2001 From: James Trotter Date: Wed, 29 Mar 2023 16:03:30 +0100 Subject: [PATCH 01/14] Add vscode settings to disable errors from weird lua use --- .vscode/settings.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..140e11d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "Lua.diagnostics.enable": false +} \ No newline at end of file From f506765149c15d2b739a0ae25901fcf83ff59ac3 Mon Sep 17 00:00:00 2001 From: James Trotter Date: Wed, 29 Mar 2023 16:04:03 +0100 Subject: [PATCH 02/14] remove magic variables --- lua/ev_menu/tab_players_controls.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/ev_menu/tab_players_controls.lua b/lua/ev_menu/tab_players_controls.lua index a1482e0..c705cfb 100644 --- a/lua/ev_menu/tab_players_controls.lua +++ b/lua/ev_menu/tab_players_controls.lua @@ -344,13 +344,13 @@ function PANEL:CreatePluginsPage() local catNames = { "Administration", "Actions", "Punishment", "Teleportation" } self.Categories = {} - for i = 1, 4 do + for i = 1, #catNames do self.Categories[i] = vgui.Create( "DCollapsibleCategory", self.PluginContainer ) self.Categories[i]:SetTall( 22 ) self.Categories[i]:SetExpanded( 0 ) self.Categories[i]:SetLabel( catNames[i] ) self.Categories[i].Header.OnMousePressed = function() - for ii = 1, 4 do + for ii = 1, #catNames do if ( self.Categories[ii]:GetExpanded() ) then self.Categories[ii]:Toggle() end end self.Categories[i]:SetExpanded( false ) From 315ba52c5c11902f82b67d358c36e7a2afe51d86 Mon Sep 17 00:00:00 2001 From: James Trotter Date: Wed, 29 Mar 2023 16:25:50 +0100 Subject: [PATCH 03/14] make it so vscode detects as glua --- .vscode/settings.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.vscode/settings.json b/.vscode/settings.json index 140e11d..d97a55a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,6 @@ { + "files.associations": { + "*.lua": "glua" + }, "Lua.diagnostics.enable": false } \ No newline at end of file From cb2dd9b9822dc4e5508f8d90c39e55a1b892f500 Mon Sep 17 00:00:00 2001 From: James Trotter Date: Wed, 29 Mar 2023 19:56:59 +0100 Subject: [PATCH 04/14] make the category system more well defined --- lua/ev_framework.lua | 30 ++++++++++++---- lua/ev_menu/tab_players_controls.lua | 52 +++++++++++++++------------- 2 files changed, 52 insertions(+), 30 deletions(-) diff --git a/lua/ev_framework.lua b/lua/ev_framework.lua index 9de10d3..60a356a 100644 --- a/lua/ev_framework.lua +++ b/lua/ev_framework.lua @@ -19,11 +19,26 @@ evolve.admins = 1 evolve.colors.blue = Color( 98, 176, 255, 255 ) evolve.colors.red = Color( 255, 62, 62, 255 ) evolve.colors.white = color_white -evolve.category = {} -evolve.category.administration = 1 -evolve.category.actions = 2 -evolve.category.punishment = 3 -evolve.category.teleportation = 4 + +evolve.category = { + administration = { + id=1, + label="Administration" + }, + actions = { + id=2, + label="Actions" + }, + punishment = { + id=3, + label="Punishment" + }, + teleportation = { + id=4, + label="Teleportation" + } +} + evolve.stagedPlugins = {} evolve.plugins = {} evolve.version = 179 @@ -254,7 +269,10 @@ function evolve:RegisterPlugin( plugin ) if ( string.Left( pluginFile, string.find( pluginFile, "_" ) - 1 ) != "cl" or CLIENT ) then table.insert( evolve.stagedPlugins, plugin ) plugin.File = pluginFile - if ( plugin.Privileges and SERVER ) then table.Add( evolve.privileges, plugin.Privileges ) table.sort( evolve.privileges ) end + if ( plugin.Privileges and SERVER ) then + table.Add( evolve.privileges, plugin.Privileges ) + table.sort( evolve.privileges ) + end else table.insert( evolve.plugins, { Title = plugin.Title, File = pluginFile } ) end diff --git a/lua/ev_menu/tab_players_controls.lua b/lua/ev_menu/tab_players_controls.lua index c705cfb..8a56353 100644 --- a/lua/ev_menu/tab_players_controls.lua +++ b/lua/ev_menu/tab_players_controls.lua @@ -300,7 +300,7 @@ function PANEL:AddButton( plugin, cat, highlight ) local button = vgui.Create( "ToolMenuButton" ) button.title, button.category, button.submenu, button.submenutitle = plugin:Menu() - if ( button.category != cat ) then button:RemoveEx() return highlight end + if ( button.category.id != cat ) then button:RemoveEx() return highlight end button.plugin = plugin button.m_bAlt = highlight @@ -310,7 +310,10 @@ function PANEL:AddButton( plugin, cat, highlight ) self:OpenPluginMenu( plugin ) end - self.Categories[ button.category ].Container:AddItem( button ) + if(self.Categories[ button.category.id ] ~= nil) then + self.Categories[ button.category.id ].Container:AddItem( button ) + end + table.insert( self.Buttons, button ) return !highlight @@ -341,40 +344,41 @@ function PANEL:CreatePluginsPage() self.PluginContainer:SetPadding( 1 ) self.PluginContainer:SetSpacing( 1 ) - local catNames = { "Administration", "Actions", "Punishment", "Teleportation" } self.Categories = {} - - for i = 1, #catNames do - self.Categories[i] = vgui.Create( "DCollapsibleCategory", self.PluginContainer ) - self.Categories[i]:SetTall( 22 ) - self.Categories[i]:SetExpanded( 0 ) - self.Categories[i]:SetLabel( catNames[i] ) - self.Categories[i].Header.OnMousePressed = function() - for ii = 1, #catNames do - if ( self.Categories[ii]:GetExpanded() ) then self.Categories[ii]:Toggle() end + for key,cat in pairs(evolve.category) do + local categoryGui = vgui.Create( "DCollapsibleCategory", self.PluginContainer ) + categoryGui:SetTall( 22 ) + categoryGui:SetExpanded( 0 ) + categoryGui:SetLabel( cat.label ) + categoryGui.Header.OnMousePressed = function() + for _,cat in pairs(self.Categories) do + if ( cat:GetExpanded() ) then cat:Toggle() end end - self.Categories[i]:SetExpanded( false ) - self.Categories[i]:Toggle() + categoryGui:SetExpanded( false ) + categoryGui:Toggle() end - self.Categories[i].Container = vgui.Create( "DPanelList", self.Categories[i] ) - self.Categories[i].Container:SetAutoSize( true ) - self.Categories[i].Container:SetSpacing( 0 ) - self.Categories[i].Container:EnableHorizontal( false ) - self.Categories[i].Container:EnableVerticalScrollbar( true ) - self.Categories[i]:SetContents( self.Categories[i].Container ) + categoryGui.Container = vgui.Create( "DPanelList", categoryGui ) + categoryGui.Container:SetAutoSize( true ) + categoryGui.Container:SetSpacing( 0 ) + categoryGui.Container:EnableHorizontal( false ) + categoryGui.Container:EnableVerticalScrollbar( true ) + categoryGui:SetContents( categoryGui.Container ) + self.Categories[cat.id]=categoryGui + self.PluginContainer:AddItem( categoryGui ) + local highlight = true for _, v in pairs( evolve.plugins ) do - highlight = self:AddButton( v, i, highlight ) + highlight = self:AddButton( v, cat.id, highlight ) end - - self.PluginContainer:AddItem( self.Categories[i] ) + + end self:CreateSubmenu() - self.Categories[2].Header.OnMousePressed() + self.Categories[evolve.category.actions.id].Header.OnMousePressed() end derma.DefineControl( "EvolvePluginList", "Plugin list", PANEL, "DPanelList" ) From 3aa15fde8d0224bce54c47e5a87d9f126154a274 Mon Sep 17 00:00:00 2001 From: James Trotter Date: Wed, 29 Mar 2023 20:31:13 +0100 Subject: [PATCH 05/14] Remove dated language --- lua/ev_plugins/sh_kick.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/ev_plugins/sh_kick.lua b/lua/ev_plugins/sh_kick.lua index 9d74914..561bb5d 100644 --- a/lua/ev_plugins/sh_kick.lua +++ b/lua/ev_plugins/sh_kick.lua @@ -56,7 +56,7 @@ function PLUGIN:Menu( arg, players ) if ( arg ) then RunConsoleCommand( "ev", "kick", players[1], arg ) else - return "Kick", evolve.category.administration, { "No reason", "Spammer", "Asshole", "Mingebag", "Retard", "Continued despite warning" }, "Reason" + return "Kick", evolve.category.administration, { "No reason", "Spammer", "Asshole", "Mingebag", "Continued despite warning" }, "Reason" end end From 485cc689d25c69b9304423a737a6164db1afbaa0 Mon Sep 17 00:00:00 2001 From: James Trotter Date: Wed, 29 Mar 2023 21:06:10 +0100 Subject: [PATCH 06/14] change the player menu to always show selected player --- lua/ev_menu/tab_players.lua | 61 +++++++++++++++------------- lua/ev_menu/tab_players_controls.lua | 26 ++++++++---- 2 files changed, 50 insertions(+), 37 deletions(-) diff --git a/lua/ev_menu/tab_players.lua b/lua/ev_menu/tab_players.lua index c3bd3d7..ba4ab08 100644 --- a/lua/ev_menu/tab_players.lua +++ b/lua/ev_menu/tab_players.lua @@ -4,36 +4,39 @@ include( "tab_players_controls.lua" ) + local TAB = {} TAB.Title = "Players" TAB.Description = "Manage players on the server." TAB.Icon = "user" TAB.Author = "Overv" TAB.Privileges = { "Player menu" } -TAB.Width = 260 +TAB.Width = 520 function TAB:Initialize( pnl ) // Create the player list self.PlayerList = vgui.Create( "EvolvePlayerList", pnl ) self.PlayerList:AddColumn("Connected Players") self.PlayerList:SetPos( 0, 0 ) - self.PlayerList:SetSize( self.Width - 6, pnl:GetParent():GetTall() - 58 ) + self.PlayerList:SetSize( (self.Width/2) - 6, pnl:GetParent():GetTall() - 58 ) // Create the plugin buttons self.ButKick = vgui.Create( "EvolveButton", pnl ) self.ButKick:SetPos( 0, pnl:GetParent():GetTall() - 58 ) self.ButKick:SetSize( 56, 27 ) self.ButKick:SetButtonText( "Kick" ) + self.ButKick.DoClick = function() - if ( self.ButPlugins:GetButtonText() == "Players" ) then + if ( self.ButPlugins:GetButtonText() == "Cancel" ) then self.PluginList:Reset() end self.PluginList:OpenPluginMenu( evolve:FindPlugin( "Kick" ) ) - self.PlayerList:MoveTo( -self.Width, 0, 0.1 ) - self.PluginList:MoveTo( 0, 0, 0.1 ) - self.ButPlugins:SetButtonText( "Players" ) + self.PluginList:MoveTo( self.Width/2, 0, 0.1 ) + + self.ButPlugins:SetEnabled( false ) + self.ButPlugins:AlphaTo(255, 0) end self.ButBan = vgui.Create( "EvolveButton", pnl ) @@ -41,40 +44,39 @@ function TAB:Initialize( pnl ) self.ButBan:SetSize( 64, 27 ) self.ButBan:SetButtonText( "Ban" ) self.ButBan.DoClick = function() - if ( self.ButPlugins:GetButtonText() == "Players" ) then - self.PluginList:Reset() - end - self.PluginList:OpenPluginMenu( evolve:FindPlugin( "Ban" ) ) - - self.PlayerList:MoveTo( -self.Width, 0, 0.1 ) - self.PluginList:MoveTo( 0, 0, 0.1 ) - self.ButPlugins:SetButtonText( "Players" ) + self.PluginList:MoveTo( self.Width/2, 0, 0.1 ) + + self.ButPlugins:SetEnabled( false ) + self.ButPlugins:AlphaTo(255, 0) end self.ButPlugins = vgui.Create( "EvolveButton", pnl ) - self.ButPlugins:SetPos( self.ButKick:GetWide() + self.ButPlugins:GetWide() + 10, pnl:GetParent():GetTall() - 58 ) - self.ButPlugins:SetSize( self.Width - 10 - self.ButKick:GetWide() - self.ButPlugins:GetWide(), 27 ) - self.ButPlugins:SetButtonText( "Plugins" ) + self.ButPlugins:SetSize( 64, 27 ) + self.ButPlugins:SetPos( self.Width/2 ,pnl:GetParent():GetTall() - 58 ) + + self.ButPlugins:SetButtonText( "Cancel" ) + + self.ButPlugins:SetEnabled( false ) + self.ButPlugins:AlphaTo(0, 0) + self.ButPlugins:SetNotHighlightedColor( 50 ) self.ButPlugins:SetHighlightedColor( 90 ) self.ButPlugins.DoClick = function() if ( self.ButPlugins:GetButtonText() == "Plugins" ) then - self.PlayerList:MoveTo( -self.Width, 0, 0.1 ) - self.PluginList:MoveTo( 0, 0, 0.1 ) - self.ButPlugins:SetButtonText( "Players" ) + else - self.PlayerList:MoveTo( 0, 0, 0.1 ) - self.PluginList:MoveTo( self.Width, 0, 0.1 ) + self.PluginList:MoveTo( self.Width/2, 0, 0.1 ) self.PluginList:Reset() - self.ButPlugins:SetButtonText( "Plugins" ) + self.ButPlugins:SetEnabled( false ) + self.ButPlugins:AlphaTo(0, 0) end end // Create the plugin list self.PluginList = vgui.Create( "EvolvePluginList", pnl ) - self.PluginList:SetPos( self.Width, 0 ) - self.PluginList:SetSize( self.Width, pnl:GetParent():GetTall() - 58 ) + self.PluginList:SetPos( self.Width/2, 0 ) + self.PluginList:SetSize( self.Width/2, pnl:GetParent():GetTall() - 58 ) self.PluginList:CreatePluginsPage() self.PlayerList.Parent = self @@ -83,11 +85,12 @@ end function TAB:Update() self.PlayerList:Populate() - if ( self.ButPlugins:GetButtonText() != "Plugins" ) then - self.PlayerList:SetPos( 0, 0 ) - self.PluginList:SetPos( self.Width, 0 ) + if ( self.ButPlugins:GetButtonText() != "" ) then + self.PluginList:SetPos( self.Width/2, 0 ) self.PluginList:Reset() - self.ButPlugins:SetButtonText( "Plugins" ) + + self.ButPlugins:AlphaTo(0, 0) + self.ButPlugins:SetEnabled( false ) end end diff --git a/lua/ev_menu/tab_players_controls.lua b/lua/ev_menu/tab_players_controls.lua index 8a56353..d44183f 100644 --- a/lua/ev_menu/tab_players_controls.lua +++ b/lua/ev_menu/tab_players_controls.lua @@ -141,7 +141,10 @@ function PANEL:Populate() if ( item.LastClick and os.clock() < item.LastClick + 0.3 and item.LastX == gui.MouseX() and item.LastY == gui.MouseY() ) then self:MoveTo( -self.Parent.Width, 0, 0.1 ) self.Parent.PluginList:MoveTo( 0, 0, 0.1 ) - self.Parent.ButPlugins:SetButtonText( "Players" ) + self.Parent.ButPlugins:SetButtonText( "Cancel" ) + + self.Parent.ButPlugins:SetEnabled( true ) + self.Parent.ButPlugins:AlphaTo(255, 0) end item.LastClick = os.clock() @@ -266,9 +269,11 @@ function PANEL:PopulateSubmenu( plugin, submenu, title ) button.OnSelect = function() RunConsoleCommand( "ev", plugin.ChatCommand, unpack( self:GetParent().Tab.PlayerList:GetSelectedPlayers() ), value[2] ) - self:GetParent().Tab.PlayerList:MoveTo( 0, 0, 0.2 ) - self:GetParent().Tab.PluginList:MoveTo( self:GetParent():GetWide(), 0, 0.2 ) - self:GetParent().Tab.ButPlugins:SetButtonText( "Plugins" ) + self:GetParent().Tab.PluginList:MoveTo( self:GetParent():GetWide()/2, 0, 0.2 ) + self:GetParent().Tab.ButPlugins:SetButtonText( "" ) + + self:GetParent().Tab.ButPlugins:SetEnabled( false ) + self:GetParent().Tab.ButPlugins:AlphaTo(0, 0) self:Reset() end @@ -282,15 +287,20 @@ function PANEL:OpenPluginMenu( plugin ) if ( submenu ) then self:PopulateSubmenu( plugin, submenu, submenutitle ) - + self:GetParent().Tab.ButPlugins:SetButtonText( "Cancel" ) + + self:GetParent().Tab.ButPlugins:SetEnabled( true ) + self:GetParent().Tab.ButPlugins:AlphaTo(255, 0) + self.PluginContainer:MoveTo( -self:GetWide(), 0, 0.2 ) self.Submenu[1]:MoveTo( 1, 1, 0.2 ) else RunConsoleCommand( "ev", plugin.ChatCommand, unpack( self:GetParent().Tab.PlayerList:GetSelectedPlayers() ) ) - self:GetParent().Tab.PlayerList:MoveTo( 0, 0, 0.2 ) - self:GetParent().Tab.PluginList:MoveTo( self:GetParent():GetWide(), 0, 0.2 ) - self:GetParent().Tab.ButPlugins:SetButtonText( "Plugins" ) + self:GetParent().Tab.PluginList:MoveTo( self:GetParent():GetWide()/2, 0, 0.2 ) + self:GetParent().Tab.ButPlugins:SetButtonText( "" ) + self:GetParent().Tab.ButPlugins:SetEnabled( false ) + self:GetParent().Tab.ButPlugins:AlphaTo(0, 0) end end From 224d68e06be17545066a5a22ca6e26f4ca445f10 Mon Sep 17 00:00:00 2001 From: James Trotter Date: Wed, 29 Mar 2023 21:29:57 +0100 Subject: [PATCH 07/14] re-introduce map menu --- lua/ev_menu/tab_setmap.lua | 94 ++++++++++++++++++++++++++++++++++ lua/ev_plugins/sh_mapslist.lua | 76 +++++++++++++++++++++++++++ 2 files changed, 170 insertions(+) create mode 100644 lua/ev_menu/tab_setmap.lua create mode 100644 lua/ev_plugins/sh_mapslist.lua diff --git a/lua/ev_menu/tab_setmap.lua b/lua/ev_menu/tab_setmap.lua new file mode 100644 index 0000000..486c9a0 --- /dev/null +++ b/lua/ev_menu/tab_setmap.lua @@ -0,0 +1,94 @@ +local TAB = {} +TAB.Title = "Maps" +TAB.Description = "Change Map." +TAB.Author = "Divran" +TAB.Width = 520 +TAB.Icon = "map" + +function TAB:Update() end + +function TAB:ChangeLevel( what ) + local map = self.MapList:GetLine(self.MapList:GetSelectedLine()):GetValue(1) + local gamemode = self.GamemodeList:GetLine(self.GamemodeList:GetSelectedLine()):GetValue(1) + if (map != "" and gamemode != "") then + if (what == "both") then + RunConsoleCommand( "ev_changemapandgamemode", map, gamemode ) + elseif (what == "map") then + RunConsoleCommand( "ev_changemapandgamemode", map, GAMEMODE.Name) + elseif (what == "gamemode") then + RunConsoleCommand( "ev_changemapandgamemode", game.GetMap(), gamemode ) + end + end +end + +function TAB:Initialize( pnl ) + + local w,h = self.Width, pnl:GetParent():GetTall() + + self.MapList = vgui.Create( "DListView", pnl ) + self.MapList:SetPos( 0, 2 ) + self.MapList:SetSize( w / 2 - 2, h - 58 ) + self.MapList:SetMultiSelect( false ) + self.MapList:AddColumn("Maps") + local maps, _ = evolve:MapPlugin_GetMaps() + for _, filename in pairs(maps) do + self.MapList:AddLine( filename ) + end + self.MapList:SelectFirstItem() + + self.GamemodeList = vgui.Create("DListView", pnl) + self.GamemodeList:SetPos( w / 2 + 2, 2 ) + self.GamemodeList:SetSize( w / 2 - 4, h - 58 ) + self.GamemodeList:SetMultiSelect( false ) + self.GamemodeList:AddColumn("Gamemodes") + local gamemodes, _ = evolve:MapPlugin_GetGamemodes() + for _, foldername in pairs(gamemodes) do + self.GamemodeList:AddLine( foldername ) + end + self.GamemodeList:SelectFirstItem() + + self.BothButton = vgui.Create("DButton", pnl ) + self.BothButton:SetWide( w / 3 - 2 ) + self.BothButton:SetTall( 20 ) + self.BothButton:SetPos( w * (1/3) , h - 52 ) + self.BothButton:SetText( "Change Map And Gamemode" ) + function self.BothButton:DoClick() + TAB:ChangeLevel( "both" ) + end + + self.MapButton = vgui.Create("DButton", pnl ) + self.MapButton:SetWide( w / 3 - 2 ) + self.MapButton:SetTall( 20 ) + self.MapButton:SetPos( 0 , h - 52 ) + self.MapButton:SetText( "Change Map" ) + function self.MapButton:DoClick() + TAB:ChangeLevel( "map" ) + end + + self.GamemodeButton = vgui.Create("DButton", pnl ) + self.GamemodeButton:SetWide( w / 3 - 2 ) + self.GamemodeButton:SetTall( 20 ) + self.GamemodeButton:SetPos( w * (2/3) , h - 52 ) + self.GamemodeButton:SetText( "Change Gamemode" ) + function self.GamemodeButton:DoClick() + TAB:ChangeLevel( "gamemode" ) + end + + + self.Block = vgui.Create( "DFrame", pnl ) + self.Block:SetDraggable( false ) + self.Block:SetTitle( "" ) + self.Block:ShowCloseButton( false ) + self.Block:SetPos( 0, 0 ) + self.Block:SetSize( w, h ) + self.Block.Paint = function() + surface.SetDrawColor( 46, 46, 46, 255 ) + surface.DrawRect( 0, 0, self.Block:GetWide(), self.Block:GetTall() ) + + draw.SimpleText( "You need the Maps List Plugin ('sh_mapslist.lua') for this tab to work.", "ScoreboardText", self.Block:GetWide() / 2, self.Block:GetTall() / 2 - 20, Color( 255, 255, 255, 255 ), TEXT_ALIGN_CENTER ) + end + + if ( table.Count(maps) ) then self.Block:SetPos( self.Block:GetWide(), 0 ) end +end + +evolve:RegisterTab( TAB ) diff --git a/lua/ev_plugins/sh_mapslist.lua b/lua/ev_plugins/sh_mapslist.lua new file mode 100644 index 0000000..5b9fccd --- /dev/null +++ b/lua/ev_plugins/sh_mapslist.lua @@ -0,0 +1,76 @@ +/*------------------------------------------------------------------------------------------------------------------------- + Get maps and gamemodes for use in the maps tab +-------------------------------------------------------------------------------------------------------------------------*/ + +local PLUGIN = {} +PLUGIN.Title = "Get Maps" +PLUGIN.Description = "Gets all maps on the server and sends them to the client for use in other plugins." +PLUGIN.Author = "Divran" +PLUGIN.ChatCommand = nil +PLUGIN.Usage = nil +PLUGIN.Maps = {} +PLUGIN.Maps_Inverted = {} +PLUGIN.Gamemodes = {} +PLUGIN.Gamemodes_Inverted = {} + +if (SERVER) then + function PLUGIN:GetMaps() + self.Maps = {} + self.Gamemodes = {} + + local files, _ = file.Find( "maps/*.bsp", "GAME" ) + for k, filename in pairs( files ) do + self.Maps[k] = filename:gsub( "%.bsp$", "" ) + self.Maps_Inverted[self.Maps[k]] = k + end + + local _, folders = file.Find( "gamemodes/*", "GAME" ) + for k, foldername in pairs( folders ) do + self.Gamemodes[k] = foldername + self.Gamemodes_Inverted[foldername] = k + end + end + PLUGIN:GetMaps() + + util.AddNetworkString("ev_sendmaps") + + function PLUGIN:PlayerInitialSpawn( ply ) + timer.Simple( 2, function() + if IsValid(ply) then + net.Start( "ev_sendmaps" ) + net.WriteTable( self.Maps ) + net.WriteTable( self.Gamemodes ) + net.Send( ply ) + end + end) + end + concommand.Add( "ev_changemapandgamemode", function( ply, command, args ) + if ( ply:EV_HasPrivilege("Map changing") ) then + local mapc = args[1] + local gamemodec = args[2] + evolve:Notify( evolve.colors.blue, ply:Nick(), evolve.colors.white, " has changed the map to ", evolve.colors.red, mapc, evolve.colors.white, " and gamemode to ", evolve.colors.red, gamemodec, evolve.colors.white, "." ) + timer.Simple( 0.5, function() RunConsoleCommand("gamemode", gamemodec) end) + timer.Simple( 0.55, function() RunConsoleCommand("changelevel", mapc) end) + else + evolve:Notify( ply, evolve.colors.red, evolve.constants.notallowed ) + end + end) +else + function PLUGIN.RecieveMaps( len ) + PLUGIN.Maps = net.ReadTable() + PLUGIN.Gamemodes = net.ReadTable() + end + net.Receive("ev_sendmaps", PLUGIN.RecieveMaps) +end + +function evolve:MapPlugin_GetMaps() + return PLUGIN.Maps, PLUGIN.Maps_Inverted +end + +function evolve:MapPlugin_GetGamemodes() + return PLUGIN.Gamemodes, PLUGIN.Gamemodes_Inverted +end + + +evolve:RegisterPlugin( PLUGIN ) + From 0a8eb6921ee239cdbd391c8514f3d7956fa04178 Mon Sep 17 00:00:00 2001 From: James Trotter Date: Wed, 29 Mar 2023 21:37:53 +0100 Subject: [PATCH 08/14] fix weird tabbing --- lua/ev_plugins/sh_mapslist.lua | 90 +++++++++++++++++----------------- 1 file changed, 44 insertions(+), 46 deletions(-) diff --git a/lua/ev_plugins/sh_mapslist.lua b/lua/ev_plugins/sh_mapslist.lua index 5b9fccd..758134d 100644 --- a/lua/ev_plugins/sh_mapslist.lua +++ b/lua/ev_plugins/sh_mapslist.lua @@ -1,11 +1,11 @@ /*------------------------------------------------------------------------------------------------------------------------- - Get maps and gamemodes for use in the maps tab + Get maps and gamemodes for use in the maps tab -------------------------------------------------------------------------------------------------------------------------*/ local PLUGIN = {} PLUGIN.Title = "Get Maps" PLUGIN.Description = "Gets all maps on the server and sends them to the client for use in other plugins." -PLUGIN.Author = "Divran" +PLUGIN.Author = "Divran & Trotski94" PLUGIN.ChatCommand = nil PLUGIN.Usage = nil PLUGIN.Maps = {} @@ -14,61 +14,59 @@ PLUGIN.Gamemodes = {} PLUGIN.Gamemodes_Inverted = {} if (SERVER) then - function PLUGIN:GetMaps() - self.Maps = {} - self.Gamemodes = {} - - local files, _ = file.Find( "maps/*.bsp", "GAME" ) - for k, filename in pairs( files ) do - self.Maps[k] = filename:gsub( "%.bsp$", "" ) - self.Maps_Inverted[self.Maps[k]] = k - end - - local _, folders = file.Find( "gamemodes/*", "GAME" ) - for k, foldername in pairs( folders ) do - self.Gamemodes[k] = foldername - self.Gamemodes_Inverted[foldername] = k - end + function PLUGIN:GetMaps() + self.Maps = {} + self.Gamemodes = {} + + local files, _ = file.Find( "maps/*.bsp", "GAME" ) + for k, filename in pairs( files ) do + self.Maps[k] = filename:gsub( "%.bsp$", "" ) + self.Maps_Inverted[self.Maps[k]] = k end - PLUGIN:GetMaps() + + local _, folders = file.Find( "gamemodes/*", "GAME" ) + for k, foldername in pairs( folders ) do + self.Gamemodes[k] = foldername + self.Gamemodes_Inverted[foldername] = k + end + end + PLUGIN:GetMaps() - util.AddNetworkString("ev_sendmaps") + util.AddNetworkString("ev_sendmaps") - function PLUGIN:PlayerInitialSpawn( ply ) - timer.Simple( 2, function() - if IsValid(ply) then - net.Start( "ev_sendmaps" ) - net.WriteTable( self.Maps ) - net.WriteTable( self.Gamemodes ) - net.Send( ply ) - end - end) + function PLUGIN:PlayerInitialSpawn( ply ) + if IsValid(ply) then + net.Start( "ev_sendmaps" ) + net.WriteTable( self.Maps ) + net.WriteTable( self.Gamemodes ) + net.Send( ply ) end - concommand.Add( "ev_changemapandgamemode", function( ply, command, args ) - if ( ply:EV_HasPrivilege("Map changing") ) then - local mapc = args[1] - local gamemodec = args[2] - evolve:Notify( evolve.colors.blue, ply:Nick(), evolve.colors.white, " has changed the map to ", evolve.colors.red, mapc, evolve.colors.white, " and gamemode to ", evolve.colors.red, gamemodec, evolve.colors.white, "." ) - timer.Simple( 0.5, function() RunConsoleCommand("gamemode", gamemodec) end) - timer.Simple( 0.55, function() RunConsoleCommand("changelevel", mapc) end) - else - evolve:Notify( ply, evolve.colors.red, evolve.constants.notallowed ) - end - end) + end + concommand.Add( "ev_changemapandgamemode", function( ply, command, args ) + if ( ply:EV_HasPrivilege("Map changing") ) then + local mapc = args[1] + local gamemodec = args[2] + evolve:Notify( evolve.colors.blue, ply:Nick(), evolve.colors.white, " has changed the map to ", evolve.colors.red, mapc, evolve.colors.white, " and gamemode to ", evolve.colors.red, gamemodec, evolve.colors.white, "." ) + timer.Simple( 0.5, function() RunConsoleCommand("gamemode", gamemodec) end) + timer.Simple( 0.55, function() RunConsoleCommand("changelevel", mapc) end) + else + evolve:Notify( ply, evolve.colors.red, evolve.constants.notallowed ) + end + end) else - function PLUGIN.RecieveMaps( len ) - PLUGIN.Maps = net.ReadTable() - PLUGIN.Gamemodes = net.ReadTable() - end - net.Receive("ev_sendmaps", PLUGIN.RecieveMaps) + function PLUGIN.RecieveMaps( len ) + PLUGIN.Maps = net.ReadTable() + PLUGIN.Gamemodes = net.ReadTable() + end + net.Receive("ev_sendmaps", PLUGIN.RecieveMaps) end function evolve:MapPlugin_GetMaps() - return PLUGIN.Maps, PLUGIN.Maps_Inverted + return PLUGIN.Maps, PLUGIN.Maps_Inverted end function evolve:MapPlugin_GetGamemodes() - return PLUGIN.Gamemodes, PLUGIN.Gamemodes_Inverted + return PLUGIN.Gamemodes, PLUGIN.Gamemodes_Inverted end From ddf4f18923c6c6d6b4564a0b2d43725e0c84b1c8 Mon Sep 17 00:00:00 2001 From: James Trotter Date: Wed, 29 Mar 2023 22:19:58 +0100 Subject: [PATCH 09/14] fix apparent race condition where the map tab would render before maps had been recieved --- lua/ev_menu/tab_setmap.lua | 147 +++++++++++++++++++-------------- lua/ev_plugins/sh_mapslist.lua | 42 ++++++---- 2 files changed, 112 insertions(+), 77 deletions(-) diff --git a/lua/ev_menu/tab_setmap.lua b/lua/ev_menu/tab_setmap.lua index 486c9a0..6f5adb7 100644 --- a/lua/ev_menu/tab_setmap.lua +++ b/lua/ev_menu/tab_setmap.lua @@ -5,7 +5,28 @@ TAB.Author = "Divran" TAB.Width = 520 TAB.Icon = "map" -function TAB:Update() end +local w,h +local maps = {} + +function TAB:RenderMaps() + maps, _ = evolve:MapPlugin_GetMaps() + for _, filename in pairs(maps) do + self.MapList:AddLine( filename ) + end + self.MapList:SelectFirstItem() + + return maps +end + +function TAB:RenderGameModes() + local gamemodes, _ = evolve:MapPlugin_GetGamemodes() + for _, foldername in pairs(gamemodes) do + self.GamemodeList:AddLine( foldername ) + end + self.GamemodeList:SelectFirstItem() + + return gamemodes +end function TAB:ChangeLevel( what ) local map = self.MapList:GetLine(self.MapList:GetSelectedLine()):GetValue(1) @@ -23,72 +44,76 @@ end function TAB:Initialize( pnl ) - local w,h = self.Width, pnl:GetParent():GetTall() + w,h = self.Width, pnl:GetParent():GetTall() - self.MapList = vgui.Create( "DListView", pnl ) - self.MapList:SetPos( 0, 2 ) - self.MapList:SetSize( w / 2 - 2, h - 58 ) - self.MapList:SetMultiSelect( false ) - self.MapList:AddColumn("Maps") - local maps, _ = evolve:MapPlugin_GetMaps() - for _, filename in pairs(maps) do - self.MapList:AddLine( filename ) - end - self.MapList:SelectFirstItem() - - self.GamemodeList = vgui.Create("DListView", pnl) - self.GamemodeList:SetPos( w / 2 + 2, 2 ) - self.GamemodeList:SetSize( w / 2 - 4, h - 58 ) - self.GamemodeList:SetMultiSelect( false ) - self.GamemodeList:AddColumn("Gamemodes") - local gamemodes, _ = evolve:MapPlugin_GetGamemodes() - for _, foldername in pairs(gamemodes) do - self.GamemodeList:AddLine( foldername ) - end - self.GamemodeList:SelectFirstItem() - - self.BothButton = vgui.Create("DButton", pnl ) - self.BothButton:SetWide( w / 3 - 2 ) - self.BothButton:SetTall( 20 ) - self.BothButton:SetPos( w * (1/3) , h - 52 ) - self.BothButton:SetText( "Change Map And Gamemode" ) - function self.BothButton:DoClick() - TAB:ChangeLevel( "both" ) - end + self.MapList = vgui.Create( "DListView", pnl ) + self.MapList:SetPos( 0, 2 ) + self.MapList:SetSize( w / 2 - 2, h - 58 ) + self.MapList:SetMultiSelect( false ) + self.MapList:AddColumn("Maps") + local maps = TAB:RenderMaps() + + self.GamemodeList = vgui.Create("DListView", pnl) + self.GamemodeList:SetPos( w / 2 + 2, 2 ) + self.GamemodeList:SetSize( w / 2 - 4, h - 58 ) + self.GamemodeList:SetMultiSelect( false ) + self.GamemodeList:AddColumn("Gamemodes") + local gamemodes = TAB:RenderGameModes() + + self.BothButton = vgui.Create("DButton", pnl ) + self.BothButton:SetWide( w / 3 - 2 ) + self.BothButton:SetTall( 20 ) + self.BothButton:SetPos( w * (1/3) , h - 52 ) + self.BothButton:SetText( "Change Map And Gamemode" ) + function self.BothButton:DoClick() + TAB:ChangeLevel( "both" ) + end - self.MapButton = vgui.Create("DButton", pnl ) - self.MapButton:SetWide( w / 3 - 2 ) - self.MapButton:SetTall( 20 ) - self.MapButton:SetPos( 0 , h - 52 ) - self.MapButton:SetText( "Change Map" ) - function self.MapButton:DoClick() - TAB:ChangeLevel( "map" ) - end + self.MapButton = vgui.Create("DButton", pnl ) + self.MapButton:SetWide( w / 3 - 2 ) + self.MapButton:SetTall( 20 ) + self.MapButton:SetPos( 0 , h - 52 ) + self.MapButton:SetText( "Change Map" ) + function self.MapButton:DoClick() + TAB:ChangeLevel( "map" ) + end - self.GamemodeButton = vgui.Create("DButton", pnl ) - self.GamemodeButton:SetWide( w / 3 - 2 ) - self.GamemodeButton:SetTall( 20 ) - self.GamemodeButton:SetPos( w * (2/3) , h - 52 ) - self.GamemodeButton:SetText( "Change Gamemode" ) - function self.GamemodeButton:DoClick() - TAB:ChangeLevel( "gamemode" ) - end + self.GamemodeButton = vgui.Create("DButton", pnl ) + self.GamemodeButton:SetWide( w / 3 - 2 ) + self.GamemodeButton:SetTall( 20 ) + self.GamemodeButton:SetPos( w * (2/3) , h - 52 ) + self.GamemodeButton:SetText( "Change Gamemode" ) + function self.GamemodeButton:DoClick() + TAB:ChangeLevel( "gamemode" ) + end - self.Block = vgui.Create( "DFrame", pnl ) - self.Block:SetDraggable( false ) - self.Block:SetTitle( "" ) - self.Block:ShowCloseButton( false ) - self.Block:SetPos( 0, 0 ) - self.Block:SetSize( w, h ) - self.Block.Paint = function() - surface.SetDrawColor( 46, 46, 46, 255 ) - surface.DrawRect( 0, 0, self.Block:GetWide(), self.Block:GetTall() ) - - draw.SimpleText( "You need the Maps List Plugin ('sh_mapslist.lua') for this tab to work.", "ScoreboardText", self.Block:GetWide() / 2, self.Block:GetTall() / 2 - 20, Color( 255, 255, 255, 255 ), TEXT_ALIGN_CENTER ) - end + self.Block = vgui.Create( "DFrame", pnl ) + self.Block:SetDraggable( false ) + self.Block:SetTitle( "" ) + self.Block:ShowCloseButton( false ) + self.Block:SetPos( 0, 0 ) + self.Block:SetSize( w, h ) + self.Block.Paint = function() + surface.SetDrawColor( 46, 46, 46, 255 ) + surface.DrawRect( 0, 0, self.Block:GetWide(), self.Block:GetTall() ) + + draw.SimpleText( "You need the Maps List Plugin ('sh_mapslist.lua') for this tab to work.", "ScoreboardText", self.Block:GetWide() / 2, self.Block:GetTall() / 2 - 20, Color( 255, 255, 255, 255 ), TEXT_ALIGN_CENTER ) + end - if ( table.Count(maps) ) then self.Block:SetPos( self.Block:GetWide(), 0 ) end + if ( table.Count(maps) ) then self.Block:SetPos( self.Block:GetWide(), 0 ) end +end + +function TAB:Update() + if(table.Count(maps) < 1)then + evolve:MapPlugin_RequestMaps() + + self.MapList:Clear() + TAB:RenderMaps() + + self.GamemodeList:Clear() + TAB:RenderGameModes() + end end evolve:RegisterTab( TAB ) diff --git a/lua/ev_plugins/sh_mapslist.lua b/lua/ev_plugins/sh_mapslist.lua index 758134d..b7b88fa 100644 --- a/lua/ev_plugins/sh_mapslist.lua +++ b/lua/ev_plugins/sh_mapslist.lua @@ -33,26 +33,32 @@ if (SERVER) then PLUGIN:GetMaps() util.AddNetworkString("ev_sendmaps") + util.AddNetworkString("ev_requestmaps") - function PLUGIN:PlayerInitialSpawn( ply ) + function PLUGIN:sendMaps( ply ) if IsValid(ply) then - net.Start( "ev_sendmaps" ) - net.WriteTable( self.Maps ) - net.WriteTable( self.Gamemodes ) - net.Send( ply ) + net.Start( "ev_sendmaps" ) + net.WriteTable( self.Maps ) + net.WriteTable( self.Gamemodes ) + net.Send( ply ) end end - concommand.Add( "ev_changemapandgamemode", function( ply, command, args ) - if ( ply:EV_HasPrivilege("Map changing") ) then - local mapc = args[1] - local gamemodec = args[2] - evolve:Notify( evolve.colors.blue, ply:Nick(), evolve.colors.white, " has changed the map to ", evolve.colors.red, mapc, evolve.colors.white, " and gamemode to ", evolve.colors.red, gamemodec, evolve.colors.white, "." ) - timer.Simple( 0.5, function() RunConsoleCommand("gamemode", gamemodec) end) - timer.Simple( 0.55, function() RunConsoleCommand("changelevel", mapc) end) - else - evolve:Notify( ply, evolve.colors.red, evolve.constants.notallowed ) - end - end) + + net.Receive("ev_requestmaps", function( len, ply ) + PLUGIN:sendMaps( ply ) + end) + + concommand.Add( "ev_changemapandgamemode", function( ply, command, args ) + if ( ply:EV_HasPrivilege("Map changing") ) then + local mapc = args[1] + local gamemodec = args[2] + evolve:Notify( evolve.colors.blue, ply:Nick(), evolve.colors.white, " has changed the map to ", evolve.colors.red, mapc, evolve.colors.white, " and gamemode to ", evolve.colors.red, gamemodec, evolve.colors.white, "." ) + timer.Simple( 0.5, function() RunConsoleCommand("gamemode", gamemodec) end) + timer.Simple( 0.55, function() RunConsoleCommand("changelevel", mapc) end) + else + evolve:Notify( ply, evolve.colors.red, evolve.constants.notallowed ) + end + end) else function PLUGIN.RecieveMaps( len ) PLUGIN.Maps = net.ReadTable() @@ -69,6 +75,10 @@ function evolve:MapPlugin_GetGamemodes() return PLUGIN.Gamemodes, PLUGIN.Gamemodes_Inverted end +function evolve:MapPlugin_RequestMaps() + net.Start( "ev_requestmaps" ) + net.SendToServer() +end evolve:RegisterPlugin( PLUGIN ) From 3a9a1a13b9742a14ed493c15d716adb331473d16 Mon Sep 17 00:00:00 2001 From: James Trotter Date: Wed, 29 Mar 2023 22:25:22 +0100 Subject: [PATCH 10/14] make it so the evolve UI no longer overlaps with the default chat box --- lua/ev_menu/cl_menu.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lua/ev_menu/cl_menu.lua b/lua/ev_menu/cl_menu.lua index cde5913..927f59b 100644 --- a/lua/ev_menu/cl_menu.lua +++ b/lua/ev_menu/cl_menu.lua @@ -102,6 +102,7 @@ hook.Add( "EV_RankPrivilegeChange", "EV_MenuPrivUpdate", function( rank, privile end end ) +local topPerc = 0.32 function MENU:Show() if ( !LocalPlayer():EV_HasPrivilege( "Menu" ) ) then return end if ( !self.Panel ) then MENU:Initialize() end @@ -114,10 +115,11 @@ function MENU:Show() self.Panel:SetKeyboardInputEnabled( false ) self.Panel:SetMouseInputEnabled( true ) - input.SetCursorPos( 50 + self.Panel:GetWide() / 2, ScrH() / 2 ) + + input.SetCursorPos( 50 + self.Panel:GetWide() / 2, ScrH() * topPerc ) timer.Create( "EV_MenuShow", 1/60, 0, function() - self.Panel:SetPos( self.Panel:GetPos() + ( 110 - self.Panel:GetPos() ) / 7, ScrH() / 2 - self.Panel:GetTall() / 2 ) + self.Panel:SetPos( self.Panel:GetPos() + ( 110 - self.Panel:GetPos() ) / 7, (ScrH() * topPerc) - self.Panel:GetTall() / 2 ) if ( self.Panel:GetPos() > 50 ) then timer.Destroy( "EV_MenuShow" ) @@ -133,7 +135,7 @@ function MENU:Hide() self.Panel:SetMouseInputEnabled( false ) timer.Create( "EV_MenuShow", 1/60, 0, function() - self.Panel:SetPos( self.Panel:GetPos() - ( self.Panel:GetPos() + self.Panel:GetWide() + 10 ) / 5, ScrH() / 2 - self.Panel:GetTall() / 2 ) + self.Panel:SetPos( self.Panel:GetPos() - ( self.Panel:GetPos() + self.Panel:GetWide() + 10 ) / 5, (ScrH() * topPerc) - self.Panel:GetTall() / 2 ) if ( self.Panel:GetPos() < -self.Panel:GetWide() ) then self.Panel:SetVisible( false ) From 18deecf7d5a4bffff941593d237c3fe3e829e1b0 Mon Sep 17 00:00:00 2001 From: James Trotter Date: Wed, 29 Mar 2023 22:44:35 +0100 Subject: [PATCH 11/14] A better fix for the map update issue --- lua/ev_menu/tab_setmap.lua | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/lua/ev_menu/tab_setmap.lua b/lua/ev_menu/tab_setmap.lua index 6f5adb7..5bc4847 100644 --- a/lua/ev_menu/tab_setmap.lua +++ b/lua/ev_menu/tab_setmap.lua @@ -51,14 +51,14 @@ function TAB:Initialize( pnl ) self.MapList:SetSize( w / 2 - 2, h - 58 ) self.MapList:SetMultiSelect( false ) self.MapList:AddColumn("Maps") - local maps = TAB:RenderMaps() + TAB:RenderMaps() self.GamemodeList = vgui.Create("DListView", pnl) self.GamemodeList:SetPos( w / 2 + 2, 2 ) self.GamemodeList:SetSize( w / 2 - 4, h - 58 ) self.GamemodeList:SetMultiSelect( false ) self.GamemodeList:AddColumn("Gamemodes") - local gamemodes = TAB:RenderGameModes() + TAB:RenderGameModes() self.BothButton = vgui.Create("DButton", pnl ) self.BothButton:SetWide( w / 3 - 2 ) @@ -98,22 +98,32 @@ function TAB:Initialize( pnl ) surface.SetDrawColor( 46, 46, 46, 255 ) surface.DrawRect( 0, 0, self.Block:GetWide(), self.Block:GetTall() ) - draw.SimpleText( "You need the Maps List Plugin ('sh_mapslist.lua') for this tab to work.", "ScoreboardText", self.Block:GetWide() / 2, self.Block:GetTall() / 2 - 20, Color( 255, 255, 255, 255 ), TEXT_ALIGN_CENTER ) + draw.SimpleText( "Waiting on map list..", "ScoreboardText", self.Block:GetWide() / 2, self.Block:GetTall() / 2 - 20, Color( 255, 255, 255, 255 ), TEXT_ALIGN_CENTER ) + draw.SimpleText( "You need the Maps List Plugin ('sh_mapslist.lua') for this tab to work. ", "ScoreboardText", self.Block:GetWide() / 2, self.Block:GetTall() / 2 , Color( 255, 255, 255, 255 ), TEXT_ALIGN_CENTER ) + draw.SimpleText( "If you have the plugin, please wait a few seconds.", "ScoreboardText", self.Block:GetWide() / 2, self.Block:GetTall() / 2 + 10, Color( 255, 255, 255, 255 ), TEXT_ALIGN_CENTER ) end - - if ( table.Count(maps) ) then self.Block:SetPos( self.Block:GetWide(), 0 ) end + + timer.Create("mapCheckTimer", 2, 0, function() + if(table.IsEmpty(maps))then + evolve:MapPlugin_RequestMaps() + timer.Simple(1, function() + self.MapList:Clear() + TAB:RenderMaps() + + self.GamemodeList:Clear() + TAB:RenderGameModes() + end) + else + self.Block:SetPos( self.Block:GetWide(), 0 ) + timer.Remove("mapCheckTimer") + end + + end) end -function TAB:Update() - if(table.Count(maps) < 1)then - evolve:MapPlugin_RequestMaps() - self.MapList:Clear() - TAB:RenderMaps() - self.GamemodeList:Clear() - TAB:RenderGameModes() - end +function TAB:Update() end evolve:RegisterTab( TAB ) From 44fecd50fecc0d8384f1a684432d10e0dca3a8ac Mon Sep 17 00:00:00 2001 From: James Trotter Date: Thu, 30 Mar 2023 01:02:11 +0100 Subject: [PATCH 12/14] tighten up times on getting map info --- lua/ev_menu/tab_setmap.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/ev_menu/tab_setmap.lua b/lua/ev_menu/tab_setmap.lua index 5bc4847..514e904 100644 --- a/lua/ev_menu/tab_setmap.lua +++ b/lua/ev_menu/tab_setmap.lua @@ -103,10 +103,10 @@ function TAB:Initialize( pnl ) draw.SimpleText( "If you have the plugin, please wait a few seconds.", "ScoreboardText", self.Block:GetWide() / 2, self.Block:GetTall() / 2 + 10, Color( 255, 255, 255, 255 ), TEXT_ALIGN_CENTER ) end - timer.Create("mapCheckTimer", 2, 0, function() + timer.Create("mapCheckTimer", 1, 0, function() if(table.IsEmpty(maps))then evolve:MapPlugin_RequestMaps() - timer.Simple(1, function() + timer.Simple(0.5, function() self.MapList:Clear() TAB:RenderMaps() From c366e1bcb3a9afc0c0d9310037c037d650876adc Mon Sep 17 00:00:00 2001 From: James Trotter Date: Thu, 30 Mar 2023 01:03:54 +0100 Subject: [PATCH 13/14] Rename plugins button to cancel fix issue where can't cancel from ban/kick --- lua/ev_menu/tab_players.lua | 56 ++++++++++++---------------- lua/ev_menu/tab_players_controls.lua | 21 +++++------ 2 files changed, 33 insertions(+), 44 deletions(-) diff --git a/lua/ev_menu/tab_players.lua b/lua/ev_menu/tab_players.lua index ba4ab08..79b10a3 100644 --- a/lua/ev_menu/tab_players.lua +++ b/lua/ev_menu/tab_players.lua @@ -27,16 +27,14 @@ function TAB:Initialize( pnl ) self.ButKick:SetButtonText( "Kick" ) self.ButKick.DoClick = function() - if ( self.ButPlugins:GetButtonText() == "Cancel" ) then - self.PluginList:Reset() - end - + self.PluginList:Reset() + self.PluginList:OpenPluginMenu( evolve:FindPlugin( "Kick" ) ) self.PluginList:MoveTo( self.Width/2, 0, 0.1 ) - self.ButPlugins:SetEnabled( false ) - self.ButPlugins:AlphaTo(255, 0) + self.ButCancel:SetEnabled( true ) + self.ButCancel:AlphaTo(255, 0) end self.ButBan = vgui.Create( "EvolveButton", pnl ) @@ -44,33 +42,30 @@ function TAB:Initialize( pnl ) self.ButBan:SetSize( 64, 27 ) self.ButBan:SetButtonText( "Ban" ) self.ButBan.DoClick = function() + self.PluginList:OpenPluginMenu( evolve:FindPlugin( "Ban" ) ) self.PluginList:MoveTo( self.Width/2, 0, 0.1 ) - self.ButPlugins:SetEnabled( false ) - self.ButPlugins:AlphaTo(255, 0) + self.ButCancel:SetEnabled( true ) + self.ButCancel:AlphaTo(255, 0) end - self.ButPlugins = vgui.Create( "EvolveButton", pnl ) - self.ButPlugins:SetSize( 64, 27 ) - self.ButPlugins:SetPos( self.Width/2 ,pnl:GetParent():GetTall() - 58 ) + self.ButCancel = vgui.Create( "EvolveButton", pnl ) + self.ButCancel:SetSize( 64, 27 ) + self.ButCancel:SetPos( self.Width/2 ,pnl:GetParent():GetTall() - 58 ) - self.ButPlugins:SetButtonText( "Cancel" ) + self.ButCancel:SetButtonText( "Cancel" ) - self.ButPlugins:SetEnabled( false ) - self.ButPlugins:AlphaTo(0, 0) - - self.ButPlugins:SetNotHighlightedColor( 50 ) - self.ButPlugins:SetHighlightedColor( 90 ) - self.ButPlugins.DoClick = function() - if ( self.ButPlugins:GetButtonText() == "Plugins" ) then + self.ButCancel:SetEnabled( false ) + self.ButCancel:AlphaTo(0, 0) - else - self.PluginList:MoveTo( self.Width/2, 0, 0.1 ) - self.PluginList:Reset() - self.ButPlugins:SetEnabled( false ) - self.ButPlugins:AlphaTo(0, 0) - end + self.ButCancel:SetNotHighlightedColor( 50 ) + self.ButCancel:SetHighlightedColor( 90 ) + self.ButCancel.DoClick = function() + self.PluginList:MoveTo( self.Width/2, 0, 0.1 ) + self.PluginList:Reset() + self.ButCancel:SetEnabled( false ) + self.ButCancel:AlphaTo(0, 0) end // Create the plugin list @@ -84,14 +79,11 @@ end function TAB:Update() self.PlayerList:Populate() - - if ( self.ButPlugins:GetButtonText() != "" ) then - self.PluginList:SetPos( self.Width/2, 0 ) - self.PluginList:Reset() + self.PluginList:SetPos( self.Width/2, 0 ) + self.PluginList:Reset() - self.ButPlugins:AlphaTo(0, 0) - self.ButPlugins:SetEnabled( false ) - end + self.ButCancel:AlphaTo(0, 0) + self.ButCancel:SetEnabled( false ) end function TAB:IsAllowed() diff --git a/lua/ev_menu/tab_players_controls.lua b/lua/ev_menu/tab_players_controls.lua index d44183f..f124a87 100644 --- a/lua/ev_menu/tab_players_controls.lua +++ b/lua/ev_menu/tab_players_controls.lua @@ -141,10 +141,9 @@ function PANEL:Populate() if ( item.LastClick and os.clock() < item.LastClick + 0.3 and item.LastX == gui.MouseX() and item.LastY == gui.MouseY() ) then self:MoveTo( -self.Parent.Width, 0, 0.1 ) self.Parent.PluginList:MoveTo( 0, 0, 0.1 ) - self.Parent.ButPlugins:SetButtonText( "Cancel" ) - self.Parent.ButPlugins:SetEnabled( true ) - self.Parent.ButPlugins:AlphaTo(255, 0) + self.Parent.ButCancel:SetEnabled( true ) + self.Parent.ButCancel:AlphaTo(255, 0) end item.LastClick = os.clock() @@ -270,10 +269,9 @@ function PANEL:PopulateSubmenu( plugin, submenu, title ) RunConsoleCommand( "ev", plugin.ChatCommand, unpack( self:GetParent().Tab.PlayerList:GetSelectedPlayers() ), value[2] ) self:GetParent().Tab.PluginList:MoveTo( self:GetParent():GetWide()/2, 0, 0.2 ) - self:GetParent().Tab.ButPlugins:SetButtonText( "" ) - self:GetParent().Tab.ButPlugins:SetEnabled( false ) - self:GetParent().Tab.ButPlugins:AlphaTo(0, 0) + self:GetParent().Tab.ButCancel:SetEnabled( false ) + self:GetParent().Tab.ButCancel:AlphaTo(0, 0) self:Reset() end @@ -287,10 +285,9 @@ function PANEL:OpenPluginMenu( plugin ) if ( submenu ) then self:PopulateSubmenu( plugin, submenu, submenutitle ) - self:GetParent().Tab.ButPlugins:SetButtonText( "Cancel" ) - self:GetParent().Tab.ButPlugins:SetEnabled( true ) - self:GetParent().Tab.ButPlugins:AlphaTo(255, 0) + self:GetParent().Tab.ButCancel:SetEnabled( true ) + self:GetParent().Tab.ButCancel:AlphaTo(255, 0) self.PluginContainer:MoveTo( -self:GetWide(), 0, 0.2 ) self.Submenu[1]:MoveTo( 1, 1, 0.2 ) @@ -298,9 +295,9 @@ function PANEL:OpenPluginMenu( plugin ) RunConsoleCommand( "ev", plugin.ChatCommand, unpack( self:GetParent().Tab.PlayerList:GetSelectedPlayers() ) ) self:GetParent().Tab.PluginList:MoveTo( self:GetParent():GetWide()/2, 0, 0.2 ) - self:GetParent().Tab.ButPlugins:SetButtonText( "" ) - self:GetParent().Tab.ButPlugins:SetEnabled( false ) - self:GetParent().Tab.ButPlugins:AlphaTo(0, 0) + + self:GetParent().Tab.ButCancel:SetEnabled( false ) + self:GetParent().Tab.ButCancel:AlphaTo(0, 0) end end From ed534ae6c9544fb2c145ea78b3f04786b4da3d30 Mon Sep 17 00:00:00 2001 From: James Trotter Date: Thu, 30 Mar 2023 02:17:50 +0100 Subject: [PATCH 14/14] Add a caret to commands if they have a submenu --- lua/ev_menu/tab_players_controls.lua | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/lua/ev_menu/tab_players_controls.lua b/lua/ev_menu/tab_players_controls.lua index f124a87..2744741 100644 --- a/lua/ev_menu/tab_players_controls.lua +++ b/lua/ev_menu/tab_players_controls.lua @@ -176,6 +176,7 @@ function PANEL:Init() self:SetContentAlignment( 4 ) self:SetTextInset( 5, 0 ) self:SetTall( 15 ) + table.insert( ToolButtons, self ) end @@ -230,6 +231,18 @@ function PANEL:AddCheckBox( strConVar ) self:InvalidateLayout() end +function PANEL:AddSubmenuIndicator() + if ( !self.SubmenuInd ) then + self.SubmenuInd = vgui.Create( "DLabel", self ) + end + + self.SubmenuInd:SetText(">") + self.SubmenuInd:SetTextColor( Color( 80, 80, 80) ) + self.SubmenuInd:SetTall( 15 ) + self.SubmenuInd:SetPos(240,0) + self:InvalidateLayout() +end + vgui.Register( "ToolMenuButton", PANEL, "DButton" ) /*------------------------------------------------------------------------------------------------------------------------- @@ -295,7 +308,7 @@ function PANEL:OpenPluginMenu( plugin ) RunConsoleCommand( "ev", plugin.ChatCommand, unpack( self:GetParent().Tab.PlayerList:GetSelectedPlayers() ) ) self:GetParent().Tab.PluginList:MoveTo( self:GetParent():GetWide()/2, 0, 0.2 ) - + self:GetParent().Tab.ButCancel:SetEnabled( false ) self:GetParent().Tab.ButCancel:AlphaTo(0, 0) end @@ -311,6 +324,11 @@ function PANEL:AddButton( plugin, cat, highlight ) button.plugin = plugin button.m_bAlt = highlight + + if(button.submenu ~= nil)then + button:AddSubmenuIndicator() + end + button:SetText( button.title ) button.OnSelect = function()