From a31eaa2dc4c6e73ff873510e8fa1ed1b2e97a804 Mon Sep 17 00:00:00 2001 From: Scott Date: Wed, 4 May 2016 21:31:48 -0400 Subject: Prop Protection and Admin menus added to the q menu --- gamemode/client/cl_inventory.lua | 464 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 442 insertions(+), 22 deletions(-) diff --git a/gamemode/client/cl_inventory.lua b/gamemode/client/cl_inventory.lua index da07939..7749be4 100644 --- a/gamemode/client/cl_inventory.lua +++ b/gamemode/client/cl_inventory.lua @@ -519,15 +519,9 @@ function PANEL:Init() draw.RoundedBox( 4, 0, 0, self:GetWide(), self:GetTall(), Color( 75, 75, 75 ) ) end - self.Encapsulate = vgui.Create("DScrollPanel",self) - self.Encapsulate:SetSize((dPanelWidth/3)*2,dPanelHeight) - --self.Encapsulate:SetSize(200,200) - self.Encapsulate:SetPos(dPanelWidth/3,0) - --self.Encapsulate:EnableVerticalScrollbar(true) - - self.ControlPanel = vgui.Create("DForm") + self.ControlPanel = vgui.Create("DForm",self) self.ControlPanel:SetSize((dPanelWidth*2)/3,dPanelWidth) - self.Encapsulate:AddItem(self.ControlPanel) + self.ControlPanel:SetPos(dPanelWidth/3,0) self.PanelProxy = {} self.PanelProxy.cp = self.ControlPanel @@ -569,7 +563,6 @@ function PANEL:Init() elseif(type == "Color") then local color = vgui.Create( "DRGBPicker" ) local color_cube = vgui.Create( "DColorCube" ) - color_cube:SetSize(200,200) local colorvars = {} local curcolor = {} for k,v in pairs({"Red","Green","Blue"}) do @@ -606,17 +599,13 @@ function PANEL:Init() self.cp:AddItem(DComboBox) elseif(type == "PropSelect") then local grid = vgui.Create( "DGrid" ) - grid:SetSize(256,64) - grid:SetPos( 0, 0 ) - grid:SetCols( 3 ) - grid:SetColWide( 128 ) - grid:SetRowHeight(64) + grid:SetPos( 10, 30 ) + grid:SetCols( 5 ) + grid:SetColWide( 36 ) for k,v in pairs(table.Models) do local icon = vgui.Create( "DModelPanel", Panel ) - icon:SetSize( 64, 64 ) + icon:SetSize( 32, 32 ) icon:SetModel( k ) - icon:SetCamPos( Vector( 15,15,15 ) ) - icon:SetLookAt( Vector( 0, 0, 1 ) ) icon.DoClick = function() GetConVar(table.ConVar):SetString(k) end @@ -718,32 +707,463 @@ end vgui.Register( "Tools", PANEL, "DPanel" ) -// Prop Protection - +/* Prop Protection */ local PANEL = {} +PANEL.LastThink = CurTime() +PANEL.Settings = { + { text = "Enable Prop Protection", elem = "DCheckBoxLabel", cmd = "spp_enabled" }, + { text = "Enable use key protection", elem = "DCheckBoxLabel", cmd = "spp_use" }, + { text = "Enable entity damage protection", elem = "DCheckBoxLabel", cmd = "spp_entdmg" }, + { text = "", elem = "DLabel" }, + { text = "Admins can touch other player props", elem = "DCheckBoxLabel", cmd = "spp_admin" }, + { text = "Admins can touch world props", elem = "DCheckBoxLabel", cmd = "spp_admin_wp" }, + { text = "", elem = "DLabel" }, + { text = "Delete disconnected admins entities", elem = "DCheckBoxLabel", cmd = "spp_del_adminprops" }, + { text = "Delete disconnected players entities", elem = "DCheckBoxLabel", cmd = "spp_del_disconnected" }, + { text = "Deletion delay in seconds", elem = "DNumSlider", cmd = "spp_del_delay", min = 10, max = 600 }, +} + function PANEL:Init() + if ( !LocalPlayer():IsAdmin() ) then + self.Settings = { + { text = "You are not an admin.", elem = "DLabel" } + } + end + self.Buddies = vgui.Create( "DPanelList", self ) + self.Buddies:EnableVerticalScrollbar( true ) + self.Buddies:SetSpacing( 5 ) + self.Buddies:SetPadding( 5 ) + function self.Buddies:Paint() + draw.RoundedBox( 4, 0, 0, self:GetWide(), self:GetTall(), Color( 75, 75, 75 ) ) + end + + self.AdminSettings = vgui.Create( "DPanelList", self ) + self.AdminSettings:EnableVerticalScrollbar( true ) + self.AdminSettings:SetSpacing( 5 ) + self.AdminSettings:SetPadding( 5 ) + function self.AdminSettings:Paint() + draw.RoundedBox( 4, 0, 0, self:GetWide(), self:GetTall(), Color( 75, 75, 75 ) ) + end + + self.AdminCleanUp = vgui.Create( "DPanelList", self ) + self.AdminCleanUp:EnableVerticalScrollbar( true ) + self.AdminCleanUp:SetSpacing( 5 ) + self.AdminCleanUp:SetPadding( 5 ) + function self.AdminCleanUp:Paint() + draw.RoundedBox( 4, 0, 0, self:GetWide(), self:GetTall(), Color( 75, 75, 75 ) ) + end + + /* Admin settings */ + for txt, t in pairs( self.Settings ) do + local item = vgui.Create( t.elem ) + item:SetText( t.text ) + + if ( t.elem != "DLabel" ) then + item:SetConVar( t.cmd ) + end + + if ( t.elem == "DNumSlider" ) then + item:SetMin( t.min ) + item:SetMax( t.max ) + item:SetDecimals( 0 ) + item.TextArea:SetTextColor( Color( 200, 200, 200 ) ) + end + + self.AdminSettings:AddItem( item ) + end + + /* Admin cleanup */ + for i, p in pairs( player.GetAll() ) do + local item = vgui.Create( "DButton" ) + item:SetConsoleCommand( "spp_cleanup_props", p:GetNWString( "SPPSteamID" ) ) + item:SetText( p:Name() ) + item:SetTall( 26 ) + self.AdminCleanUp:AddItem( item ) + end + + local item = vgui.Create( "DButton" ) + item:SetConsoleCommand( "spp_cleanup_props_left" ) + item:SetText( "Cleanup disconnected players props" ) + item:SetTall( 26 ) + self.AdminCleanUp:AddItem( item ) + + /* Client */ + for i, p in pairs( player.GetAll() ) do + if ( p != LocalPlayer() ) then + local item = vgui.Create( "DCheckBoxLabel" ) + + local BCommand = "spp_buddy_" .. p:GetNWString( "SPPSteamID" ) + if ( !LocalPlayer():GetInfo( BCommand ) ) then CreateClientConVar( BCommand, 0, false, true ) end + item:SetConVar( BCommand ) + item:SetText( p:Name() ) + item:SetTextColor( Color( 255, 255, 255, 255 ) ) + self.Buddies:AddItem( item ) + end + end + + local item = vgui.Create( "DButton" ) + item:SetConsoleCommand( "spp_apply_buddies" ) + item:SetText( "Apply settings" ) + item:SetTall( 26 ) + self.Buddies:AddItem( item ) + + local item = vgui.Create( "DButton" ) + item:SetConsoleCommand( "spp_clear_buddies" ) + item:SetText( "Clear all buddies" ) + item:SetTall( 26 ) + self.Buddies:AddItem( item ) end function PANEL:Paint() - draw.RoundedBox(0,0,0,self:GetWide(), self:GetTall(), Color(48,48,48,125)) +end + +function PANEL:Think() + if ( CurTime() >= self.LastThink + 3 )then + self.LastThink = CurTime() + self.AdminCleanUp:Clear( true ) + self.Buddies:Clear( true ) + + /* Admin cleanup */ + if ( LocalPlayer():IsAdmin() ) then + for i, p in pairs( player.GetAll() ) do + local item = vgui.Create( "DButton" ) + item:SetConsoleCommand( "spp_cleanup_props", p:GetNWString( "SPPSteamID" ) ) + item:SetTall( 26 ) + item:SetText( p:Name() ) + self.AdminCleanUp:AddItem( item ) + end + + local item = vgui.Create( "DButton" ) + item:SetConsoleCommand( "spp_cleanup_props_left" ) + item:SetTall( 26 ) + item:SetText( "Cleanup disconnected players props" ) + self.AdminCleanUp:AddItem( item ) + + self.AdminSettings:SetVisible( true ) + self.AdminCleanUp:SetVisible( true ) + else + local item = vgui.Create( "DLabel" ) + item:SetText( "You are not an admin." ) + self.AdminCleanUp:AddItem( item ) + + self.AdminSettings:SetVisible( false ) + self.AdminCleanUp:SetVisible( false ) + end + + /* Client */ + for i, p in pairs( player.GetAll() ) do + if ( p != LocalPlayer() ) then + local item = vgui.Create( "DCheckBoxLabel" ) + + local BCommand = "spp_buddy_" .. p:GetNWString( "SPPSteamID" ) + if ( !LocalPlayer():GetInfo( BCommand ) ) then CreateClientConVar( BCommand, 0, false, true ) end + item:SetConVar( BCommand ) + item:SetText( p:Name() ) + self.Buddies:AddItem( item ) + end + end + + local item = vgui.Create( "DButton" ) + item:SetConsoleCommand( "spp_apply_buddies" ) + item:SetText( "Apply settings" ) + item:SetTall( 26 ) + self.Buddies:AddItem( item ) + + local item = vgui.Create( "DButton" ) + item:SetConsoleCommand( "spp_clear_buddies" ) + item:SetText( "Clear all buddies" ) + item:SetTall( 26 ) + self.Buddies:AddItem( item ) + end +end + +function PANEL:PerformLayout() + self:StretchToParent( 0, 21, 0, 5 ) + + self.Buddies:SetPos( 5, 5 ) + self.Buddies:SetSize( self:GetWide() * 0.45, self:GetTall() - 5 ) + + self.AdminSettings:SetPos( self:GetWide() * 0.45 + 10, 5 ) + self.AdminSettings:SetSize( self:GetWide() - ( self:GetWide() * 0.45 ) - 14, self:GetTall() / 2 - 5 ) + + self.AdminCleanUp:SetPos( self:GetWide() * 0.45 + 10, self:GetTall() / 2 + 5 ) + self.AdminCleanUp:SetSize( self:GetWide() - ( self:GetWide() * 0.45 ) - 14, self:GetTall() / 2 - 5 ) end vgui.Register( "Prop Protection", PANEL, "DPanel" ) -// Admin +/* Admin */ local PANEL = {} +PANEL.SpawningCmds = { + { text = "Spawn tree", cmd = "gms_admin_maketree" }, + { text = "Spawn rock", cmd = "gms_admin_makerock" }, + { text = "Spawn food", cmd = "gms_admin_makefood" }, + { text = "Save all characters", cmd = "gms_admin_saveallcharacters" }, + { text = "Plant random plant", cmd = "gms_admin_makeplant" }, + { text = "Plant melons", cmd = "gms_admin_makeplant 1" }, + { text = "Plant banana tree", cmd = "gms_admin_makeplant 2" }, + { text = "Plant oranges", cmd = "gms_admin_makeplant 3" }, + { text = "Plant berry bush", cmd = "gms_admin_makeplant 4" }, + { text = "Plant grain", cmd = "gms_admin_makeplant 5" } +} + +PANEL.Settings = { + { text = "Force players to use Tribe color", elem = "DCheckBoxLabel", cmd = "gms_TeamColors" }, + { text = "Allow players to damage each other with tools", elem = "DCheckBoxLabel", cmd = "gms_PVPDamage" }, + { text = "Enable free build for everyone", elem = "DCheckBoxLabel", cmd = "gms_FreeBuild" }, + { text = "Enable free build for super admins", elem = "DCheckBoxLabel", cmd = "gms_FreeBuildSa" }, + { text = "Give all players all tools", elem = "DCheckBoxLabel", cmd = "gms_AllTools" }, + //{ text = "Enable low needs alerts ( coughing, etc )", elem = "DCheckBoxLabel", cmd = "gms_alerts" }, + { text = "Spread fire", elem = "DCheckBoxLabel", cmd = "gms_SpreadFire" }, + { text = "Fadeout rocks, just like trees", elem = "DCheckBoxLabel", cmd = "gms_FadeRocks" }, + { text = "Enable campfires", elem = "DCheckBoxLabel", cmd = "gms_campfire" }, + { text = "Spawn zombies at night", elem = "DCheckBoxLabel", cmd = "gms_zombies" }, + { text = "Enable day/night cycle", elem = "DCheckBoxLabel", cmd = "gms_daynight" }, + //{ text = "Costs scale", elem = "DNumSlider", decimals = 1, cmd = "gms_CostsScale", min = 1, max = 4 }, + { text = "Plant limit per player", elem = "DNumSlider", cmd = "gms_PlantLimit", min = 10, max = 35 }, + { text = "", elem = "DLabel" }, + { text = "Reproduce trees", elem = "DCheckBoxLabel", cmd = "gms_ReproduceTrees" }, + { text = "Max reproduced trees", elem = "DNumSlider", cmd = "gms_MaxReproducedTrees", min = 1, max = 60 }, + { text = "", elem = "DLabel" }, + { text = "Autosave user profiles", elem = "DCheckBoxLabel", cmd = "gms_AutoSave" }, + { text = "Autosave delay ( minutes )", elem = "DNumSlider", cmd = "gms_AutoSaveTime", min = 1, max = 30 }, +} + function PANEL:Init() - + self.MapSaving = vgui.Create( "DPanelList", self ) + self.MapSaving:EnableVerticalScrollbar( true ) + self.MapSaving:SetSpacing( 5 ) + self.MapSaving:SetPadding( 5 ) + function self.MapSaving:Paint() + draw.RoundedBox( 4, 0, 0, self:GetWide(), self:GetTall(), Color( 75, 75, 75 ) ) + end + + self.Populating = vgui.Create( "DPanelList", self ) + self.Populating:EnableVerticalScrollbar( true ) + self.Populating:SetSpacing( 5 ) + self.Populating:SetPadding( 5 ) + function self.Populating:Paint() + draw.RoundedBox( 4, 0, 0, self:GetWide(), self:GetTall(), Color( 75, 75, 75 ) ) + end + + self.AdminSettings = vgui.Create( "DPanelList", self ) + self.AdminSettings:EnableVerticalScrollbar( true ) + self.AdminSettings:SetSpacing( 5 ) + self.AdminSettings:SetPadding( 5 ) + function self.AdminSettings:Paint() + draw.RoundedBox( 4, 0, 0, self:GetWide(), self:GetTall(), Color( 75, 75, 75 ) ) + end + + self.Spawning = vgui.Create( "DPanelList", self ) + self.Spawning:EnableVerticalScrollbar( true ) + self.Spawning:SetSpacing( 5 ) + self.Spawning:SetPadding( 5 ) + function self.Spawning:Paint() + draw.RoundedBox( 4, 0, 0, self:GetWide(), self:GetTall(), Color( 75, 75, 75 ) ) + end + + for txt, t in pairs( self.Settings ) do + local item = vgui.Create( t.elem ) + item:SetText( t.text ) + + if ( t.elem == "DNumSlider" ) then + item:SetMin( t.min ) + item:SetMax( t.max ) + item:SetDecimals( t.decimals or 0 ) + item.TextArea:SetTextColor( Color( 200, 200, 200 ) ) + end + + if ( t.elem != "DLabel" ) then item:SetConVar( t.cmd ) end + + self.AdminSettings:AddItem( item ) + end + + for txt, t in pairs( self.SpawningCmds ) do + local item = vgui.Create( "DButton" ) + item:SetText( t.text ) + item:SetTall( 26 ) + item:SetConsoleCommand( t.cmd ) + self.Spawning:AddItem( item ) + end + + // POPULATE AREA + local populatearea = vgui.Create( "DPanel", self ) + populatearea:SetTall( 100 ) + + local label = vgui.Create( "DLabel", populatearea ) + label:SetPos( 10, 5 ) + label:SetDark( true ) + label:SetText( "Amount" ) + label:SizeToContents() + + self.PopulateAmount = vgui.Create( "DTextEntry", populatearea ) + self.PopulateAmount:SetPos( 10, 20 ) + self.PopulateAmount:SetTall( 24 ) + self.PopulateAmount:SetValue( "10" ) + populatearea.PopulateAmount = self.PopulateAmount + + local label = vgui.Create( "DLabel", populatearea ) + label:SetDark( true ) + label:SetText( "Max radius" ) + label:SizeToContents() + + self.PopulateRadius = vgui.Create( "DTextEntry", populatearea ) + self.PopulateRadius:SetValue( "1000" ) + self.PopulateRadius:SetTall( 24 ) + self.PopulateRadius.Label = label + populatearea.PopulateRadius = self.PopulateRadius + + local label = vgui.Create( "DLabel", populatearea ) + label:SetPos( 10, 49 ) + label:SetDark( true ) + label:SetText( "Type" ) + label:SizeToContents() + + local typ = "Trees" + self.PopulateType = vgui.Create( "DComboBox", populatearea ) + self.PopulateType:SetTall( 24 ) + self.PopulateType:SetPos( 10, 64 ) + self.PopulateType:AddChoice( "Trees", "Trees" ) + self.PopulateType:AddChoice( "Rocks", "Rocks" ) + self.PopulateType:AddChoice( "Random plants", "Random_Plant" ) + self.PopulateType:ChooseOptionID( 1 ) + function self.PopulateType:OnSelect( index, value, data ) typ = data end + + self.PopulateArea = vgui.Create( "gms_CommandButton", populatearea ) + self.PopulateArea:SetTall( 24 ) + self.PopulateArea:SetText( "Populate Area" ) + function self.PopulateArea:DoClick() + local p = self:GetParent() + RunConsoleCommand( "gms_admin_PopulateArea", typ, string.Trim( p.PopulateAmount:GetValue() ), string.Trim( p.PopulateRadius:GetValue() ) ) + end + + self.Populating:AddItem( populatearea ) + + // POPULATE AREA: Antlions + local populatearea = vgui.Create( "DPanel", self ) + populatearea:SetTall( 54 ) + + local label = vgui.Create( "DLabel", populatearea ) + label:SetPos( 10, 5 ) + label:SetDark( true ) + label:SetText( "Amount" ) + label:SizeToContents() + + self.PopulateAmountAnt = vgui.Create( "DTextEntry", populatearea ) + self.PopulateAmountAnt:SetPos( 10, 20 ) + self.PopulateAmountAnt:SetTall( 24 ) + self.PopulateAmountAnt:SetValue( "5" ) + populatearea.PopulateAmountAnt = self.PopulateAmountAnt + + self.PopulateAreaAnt = vgui.Create( "gms_CommandButton", populatearea ) + self.PopulateAreaAnt:SetTall( 24 ) + self.PopulateAreaAnt:SetText( "Make Antlion Barrow" ) + function self.PopulateAreaAnt:DoClick() + RunConsoleCommand( "gms_admin_MakeAntlionBarrow", string.Trim( self:GetParent().PopulateAmountAnt:GetValue() ) ) + end + + self.Populating:AddItem( populatearea ) + + // Save map + local populatearea = vgui.Create( "DPanel", self ) + populatearea:SetTall( 64 ) + + self.MapName = vgui.Create( "DTextEntry", populatearea ) + self.MapName:SetPos( 5, 5 ) + self.MapName:SetTall( 24 ) + self.MapName:SetValue( "savename" ) + populatearea.MapName = self.MapName + + self.SaveMap = vgui.Create( "gms_CommandButton", populatearea ) + self.SaveMap:SetPos( 5, 34 ) + self.SaveMap:SetTall( 24 ) + self.SaveMap:SetText( "Save" ) + function self.SaveMap:DoClick() + RunConsoleCommand( "gms_admin_savemap", string.Trim( self:GetParent().MapName:GetValue() ) ) + end + + self.MapSaving:AddItem( populatearea ) + + // Load/delete map + local populatearea = vgui.Create( "DPanel", self ) + populatearea:SetTall( 64 ) + + local map = "" + self.MapNameL = vgui.Create( "DComboBox", populatearea ) + self.MapNameL:SetTall( 24 ) + self.MapNameL:SetPos( 5, 5 ) + function self.MapNameL:OnSelect( index, value, data ) map = data end + populatearea.MapNameL = self.MapNameL + + self.LoadMap = vgui.Create( "gms_CommandButton", populatearea ) + self.LoadMap:SetPos( 5, 34 ) + self.LoadMap:SetTall( 24 ) + self.LoadMap:SetText( "Load" ) + function self.LoadMap:DoClick() + RunConsoleCommand( "gms_admin_loadmap", string.Trim( map ) ) + end + + self.DeleteMap = vgui.Create( "gms_CommandButton", populatearea ) + self.DeleteMap:SetTall( 24 ) + self.DeleteMap:SetText( "Delete" ) + function self.DeleteMap:DoClick() + RunConsoleCommand( "gms_admin_deletemap", map ) + end + + self.MapSaving:AddItem( populatearea ) end function PANEL:Paint() + draw.RoundedBox(0,0,0,self:GetWide(), self:GetTall(), Color(48,48,48,125)) + +end + +function PANEL:PerformLayout() + self:StretchToParent( 0, 21, 0, 5 ) + + self.MapSaving:SetPos( 5, 5 ) + self.MapSaving:SetSize( self:GetWide() * 0.45, self:GetTall() / 2 - 5 ) + + self.Populating:SetPos( 5, self:GetTall() / 2 + 5 ) + self.Populating:SetSize( self:GetWide() - ( self:GetWide() * 0.45 ) - 14, self:GetTall() / 2 - 5 ) + + self.AdminSettings:SetPos( self:GetWide() * 0.45 + 10, 5 ) + self.AdminSettings:SetSize( self:GetWide() - ( self:GetWide() * 0.45 ) - 14, self:GetTall() / 2 - 5 ) + + self.Spawning:SetPos( self:GetWide() - ( self:GetWide() * 0.45 ) - 4, self:GetTall() / 2 + 5 ) + self.Spawning:SetSize( self:GetWide() * 0.45, self:GetTall() / 2 - 5 ) + + /* POPULATION */ + self.PopulateAmount:SetWide( self.Populating:GetWide() / 2 - 20 ) + self.PopulateRadius:SetWide( self.Populating:GetWide() / 2 - 20 ) + self.PopulateRadius.Label:SetPos( self.Populating:GetWide() / 2, 5 ) + self.PopulateRadius:SetPos( self.Populating:GetWide() / 2, 20 ) + + self.PopulateType:SetWide( self.Populating:GetWide() / 2 - 20 ) + self.PopulateArea:SetWide( self.Populating:GetWide() / 2 - 20 ) + self.PopulateArea:SetPos( self.Populating:GetWide() / 2, 64 ) + + /* ANTLIONS */ + self.PopulateAmountAnt:SetWide( self.Populating:GetWide() / 2 - 20 ) + self.PopulateAreaAnt:SetWide( self.Populating:GetWide() / 2 - 20 ) + self.PopulateAreaAnt:SetPos( self.Populating:GetWide() / 2, 20 ) + + // Save map + self.MapName:SetWide( self.MapSaving:GetWide() - 20 ) + self.SaveMap:SetWide( self.MapSaving:GetWide() - 20 ) + + // Load/delete map + self.MapNameL:SetSize( self.MapSaving:GetWide() - 20, 24 ) + self.LoadMap:SetWide( self.MapSaving:GetWide() / 2 - 20 ) + self.DeleteMap:SetWide( self.MapSaving:GetWide() / 2 - 20 ) + self.DeleteMap:SetPos( self.MapSaving:GetWide() / 2 + 5, 34 ) end vgui.Register( "Admin", PANEL, "DPanel" ) -- cgit v1.2.3-70-g09d2