diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..d97a55a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "*.lua": "glua" + }, + "Lua.diagnostics.enable": false +} \ No newline at end of file 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/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 ) diff --git a/lua/ev_menu/tab_players.lua b/lua/ev_menu/tab_players.lua index c3bd3d7..79b10a3 100644 --- a/lua/ev_menu/tab_players.lua +++ b/lua/ev_menu/tab_players.lua @@ -4,36 +4,37 @@ 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 - self.PluginList:Reset() - end - + self.PluginList:Reset() + 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.ButCancel:SetEnabled( true ) + self.ButCancel:AlphaTo(255, 0) end self.ButBan = vgui.Create( "EvolveButton", pnl ) @@ -41,40 +42,36 @@ 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.ButCancel:SetEnabled( true ) + self.ButCancel: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: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:Reset() - self.ButPlugins:SetButtonText( "Plugins" ) - end + self.ButCancel = vgui.Create( "EvolveButton", pnl ) + self.ButCancel:SetSize( 64, 27 ) + self.ButCancel:SetPos( self.Width/2 ,pnl:GetParent():GetTall() - 58 ) + + self.ButCancel:SetButtonText( "Cancel" ) + + self.ButCancel:SetEnabled( false ) + self.ButCancel:AlphaTo(0, 0) + + 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 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 @@ -82,13 +79,11 @@ end function TAB:Update() self.PlayerList:Populate() - - if ( self.ButPlugins:GetButtonText() != "Plugins" ) then - self.PlayerList:SetPos( 0, 0 ) - self.PluginList:SetPos( self.Width, 0 ) - self.PluginList:Reset() - self.ButPlugins:SetButtonText( "Plugins" ) - end + self.PluginList:SetPos( self.Width/2, 0 ) + self.PluginList:Reset() + + 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 a1482e0..2744741 100644 --- a/lua/ev_menu/tab_players_controls.lua +++ b/lua/ev_menu/tab_players_controls.lua @@ -141,7 +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( "Players" ) + + self.Parent.ButCancel:SetEnabled( true ) + self.Parent.ButCancel:AlphaTo(255, 0) end item.LastClick = os.clock() @@ -174,6 +176,7 @@ function PANEL:Init() self:SetContentAlignment( 4 ) self:SetTextInset( 5, 0 ) self:SetTall( 15 ) + table.insert( ToolButtons, self ) end @@ -228,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" ) /*------------------------------------------------------------------------------------------------------------------------- @@ -266,9 +281,10 @@ 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.ButCancel:SetEnabled( false ) + self:GetParent().Tab.ButCancel:AlphaTo(0, 0) self:Reset() end @@ -282,15 +298,19 @@ function PANEL:OpenPluginMenu( plugin ) if ( submenu ) then self:PopulateSubmenu( plugin, submenu, submenutitle ) - + + 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 ) 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.ButCancel:SetEnabled( false ) + self:GetParent().Tab.ButCancel:AlphaTo(0, 0) end end @@ -300,17 +320,25 @@ 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 + + if(button.submenu ~= nil)then + button:AddSubmenuIndicator() + end + button:SetText( button.title ) button.OnSelect = function() 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 +369,41 @@ function PANEL:CreatePluginsPage() self.PluginContainer:SetPadding( 1 ) self.PluginContainer:SetSpacing( 1 ) - local catNames = { "Administration", "Actions", "Punishment", "Teleportation" } self.Categories = {} - - for i = 1, 4 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 - 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" ) diff --git a/lua/ev_menu/tab_setmap.lua b/lua/ev_menu/tab_setmap.lua new file mode 100644 index 0000000..514e904 --- /dev/null +++ b/lua/ev_menu/tab_setmap.lua @@ -0,0 +1,129 @@ +local TAB = {} +TAB.Title = "Maps" +TAB.Description = "Change Map." +TAB.Author = "Divran" +TAB.Width = 520 +TAB.Icon = "map" + +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) + 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 ) + + 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") + 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") + 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.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( "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 + + timer.Create("mapCheckTimer", 1, 0, function() + if(table.IsEmpty(maps))then + evolve:MapPlugin_RequestMaps() + timer.Simple(0.5, 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() +end + +evolve:RegisterTab( TAB ) 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 diff --git a/lua/ev_plugins/sh_mapslist.lua b/lua/ev_plugins/sh_mapslist.lua new file mode 100644 index 0000000..b7b88fa --- /dev/null +++ b/lua/ev_plugins/sh_mapslist.lua @@ -0,0 +1,84 @@ +/*------------------------------------------------------------------------------------------------------------------------- + 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 & Trotski94" +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") + util.AddNetworkString("ev_requestmaps") + + function PLUGIN:sendMaps( ply ) + if IsValid(ply) then + net.Start( "ev_sendmaps" ) + net.WriteTable( self.Maps ) + net.WriteTable( self.Gamemodes ) + net.Send( ply ) + 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() + 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 + +function evolve:MapPlugin_RequestMaps() + net.Start( "ev_requestmaps" ) + net.SendToServer() +end + +evolve:RegisterPlugin( PLUGIN ) +