• DListView - ply data per line?
    3 replies, posted
I made a list using DListView, it prints all players currently in-game with steam id. My question is, I made a right click menu, how would I get the ply: data so I could have it execute commands like ply:kick I know there's a few errors in my code, but right now I'm just focusing on how to pull each players ply: info [CODE] local playerList = vgui.Create( "DListView", panelLeft ) playerList:SetTall( 680 ) playerList:DockMargin( 10, 10, 10, 10 ) playerList:Dock( TOP ) playerList:SetMultiSelect( false ) playerList:AddColumn ( "Name" ) playerList:AddColumn ( "SteamID32" ) playerList.Paint = function( self, w, h ) DrawBlurPanel( self ) draw.RoundedBox( 4,0,0,w,h,Color( 0,0,0,200 ) ) end for k, v in pairs( playerList["Columns"] ) do v.Header.Paint = function(self, w, h) draw.RoundedBox( 4,0,0,w,h,Color( 100,0,0,255 ) ) end v.Header:SetTextColor( color_white ) end function playerList:OnRowSelected( row ) local ban = self:GetLine( row ).ban end function playerList:OnRowRightClick( row ) local PlayerlistMenu = DermaMenu( ) local selectedDbId = self:GetLine( row ) PlayerlistMenu:AddOption( "Kick", function( ) ply:Kick( "Goodbye" ) self:RemoveLine( row ) end ) PlayerlistMenu:Open( ) end function playerList:Rehash( ) self:Clear( ) for k, v in pairs(player.GetAll()) do local row = playerList:AddLine( v:Name(), v:SteamID() ) function row:GetColumnText( i ) return self.Columns[i] and self.Columns[i].value or "" end function row:Paint( w, h ) self:SizeToContents( ) SetRowColor = Color( 0, 0, 0, 150 ) if self:IsLineSelected( ) then surface.SetDrawColor( 0, 0, 0, 190 ) surface.DrawRect( 0, 0, self:GetWide( ), self:GetTall( ) ) surface.SetDrawColor( Color( 0, 0, 0, 190 ) ) surface.DrawRect( 2, 2, self:GetWide( ) - 4, self:GetTall( ) - 4 ) surface.SetTextColor( 255, 255, 255, 255 ) else surface.SetDrawColor( SetRowColor ) surface.DrawRect( 0, 0, self:GetWide( ), self:GetTall( ) ) surface.SetTextColor( 255, 255, 255, 255 ) end end end if not selectedItem then self:SelectFirstItem( ) else self:SelectItem( selectedItem ) end end playerList:Rehash( ) LocalPlayer( ).playerList = playerList [/CODE] Any help would be great! thanks!
Under: [code]local row = playerList:AddLine( v:Name(), v:SteamID() )[/code] Add: [code]row.player = v[/code] Then you can execute code by getting active row and running it's key - activeRow.player
Thanks Neth. I got it returning properly when I print (v) now. I don't know why I didn't think of that. But where my confusion is, is that my menu is sitting in another function. I can still call "v" though as long as it's not a local variable right? and for each player is a different key, so would I use something like [i] for the key and loop through?
Modified the code a bit - still getting nil on kick() though [QUOTE] local playerList = vgui.Create( "DListView", panelLeft ) playerList:SetTall( 680 ) playerList:DockMargin( 10, 10, 10, 10 ) playerList:Dock( TOP ) playerList:SetMultiSelect( false ) playerList:AddColumn ( "Name" ) playerList:AddColumn ( "SteamID32" ) playerList.Paint = function( self, w, h ) DrawBlurPanel( self ) draw.RoundedBox( 4,0,0,w,h,Color( 0,0,0,200 ) ) end for k, v in pairs( playerList["Columns"] ) do v.Header.Paint = function(self, w, h) draw.RoundedBox( 4,0,0,w,h,Color( 100,0,0,255 ) ) end v.Header:SetTextColor( color_white ) end for k, v in pairs(player.GetAll()) do local row = playerList:AddLine( v:Name(), v:SteamID() ) ent = v //local ent = playerList:GetSelected() function row:GetColumnText( i ) return self.Columns[i] and self.Columns[i].value or "" end function row:Paint( w, h ) for _, column in pairs( row["Columns"] ) do column:SetFont("PlayerlistName") column:SetTextColor( color_white ) end self:SizeToContents( ) SetRowColor = Color( 0, 0, 0, 150 ) if self:IsLineSelected( ) then surface.SetDrawColor( 0, 0, 0, 190 ) surface.DrawRect( 0, 0, self:GetWide( ), self:GetTall( ) ) surface.SetDrawColor( Color( 0, 0, 0, 190 ) ) surface.DrawRect( 2, 2, self:GetWide( ) - 4, self:GetTall( ) - 4 ) surface.SetTextColor( 255, 255, 255, 255 ) else surface.SetDrawColor( SetRowColor ) surface.DrawRect( 0, 0, self:GetWide( ), self:GetTall( ) ) surface.SetTextColor( 255, 255, 255, 255 ) end end end function playerList:OnRowSelected( row ) local ban = self:GetLine( row ).ban end function playerList:OnRowRightClick( row ) local PlayerlistMenu = DermaMenu( ) local selectedDbId = self:GetLine( row ) PlayerlistMenu:AddOption( "Kick", function( ) ent:Kick( "Goodbye" ) self:RemoveLine( row ) end ) PlayerlistMenu:Open( ) [/QUOTE]
Sorry, you need to Log In to post a reply to this thread.