• Garry's Mod 2012 - Scoreboard
    5 replies, posted
hey um i fixed this up in a solid 2 seconds enjoy (base gamemode scoreboard) cl_scoreboard.lua [CODE] surface.CreateFont( "ScoreboardHead",{ font = "coolvetica", size = 48, weight = 500, antialias = true, outline = false } ) surface.CreateFont( "ScoreboardSub",{ font = "coolvetica", size = 24, weight = 500, antialias = true, outline = false } ) surface.CreateFont( "ScoreboardText",{ font = "Tahoma", size = 16, weight = 1000, antialias = true, outline = false } ) /*--------------------------------------------------------- Name: gamemode:ScoreboardShow( ) Desc: Sets the scoreboard to visible ---------------------------------------------------------*/ function GM:ScoreboardShow() GAMEMODE.ShowScoreboard = true end /*--------------------------------------------------------- Name: gamemode:ScoreboardHide( ) Desc: Hides the scoreboard ---------------------------------------------------------*/ function GM:ScoreboardHide() GAMEMODE.ShowScoreboard = false end // TODO: CLEAN THIS CODE function GM:GetTeamScoreInfo() local TeamInfo = {} for id,pl in pairs( player.GetAll() ) do local _team = pl:Team() local _frags = pl:Frags() local _deaths = pl:Deaths() local _ping = pl:Ping() if (not TeamInfo[_team]) then TeamInfo[_team] = {} TeamInfo[_team].TeamName = team.GetName( _team ) TeamInfo[_team].Color = team.GetColor( _team ) TeamInfo[_team].Players = {} end local PlayerInfo = {} PlayerInfo.Frags = _frags PlayerInfo.Deaths = _deaths PlayerInfo.Score = _frags - _deaths PlayerInfo.Ping = _ping PlayerInfo.Name = pl:Nick() PlayerInfo.PlayerObj = pl local insertPos = #TeamInfo[_team].Players + 1 for idx,info in pairs(TeamInfo[_team].Players) do if (PlayerInfo.Frags > info.Frags) then insertPos = idx break elseif (PlayerInfo.Frags == info.Frags) then if (PlayerInfo.Deaths < info.Deaths) then insertPos = idx break elseif (PlayerInfo.Deaths == info.Deaths) then if (PlayerInfo.Name < info.Name) then insertPos = idx break end end end end table.insert(TeamInfo[_team].Players, insertPos, PlayerInfo) end return TeamInfo end function GM:HUDDrawScoreBoard() if (!GAMEMODE.ShowScoreboard) then return end if (GAMEMODE.ScoreDesign == nil) then GAMEMODE.ScoreDesign = {} GAMEMODE.ScoreDesign.HeaderY = 0 GAMEMODE.ScoreDesign.Height = ScrH() / 2 end local alpha = 255 local ScoreboardInfo = self:GetTeamScoreInfo() local xOffset = ScrW() / 10 local yOffset = 32 local scrWidth = ScrW() local scrHeight = ScrH() - 64 local boardWidth = scrWidth - (2* xOffset) local boardHeight = scrHeight local colWidth = 75 boardWidth = math.Clamp( boardWidth, 400, 600 ) boardHeight = GAMEMODE.ScoreDesign.Height xOffset = (ScrW() - boardWidth) / 2.0 yOffset = (ScrH() - boardHeight) / 2.0 yOffset = yOffset - ScrH() / 4.0 yOffset = math.Clamp( yOffset, 32, ScrH() ) // Background surface.SetDrawColor( 100, 150, 250, 200 ) surface.DrawRect( xOffset, yOffset, boardWidth, GAMEMODE.ScoreDesign.HeaderY) surface.SetDrawColor( 150, 150, 150, 200 ) surface.DrawRect( xOffset, yOffset+GAMEMODE.ScoreDesign.HeaderY, boardWidth, boardHeight-GAMEMODE.ScoreDesign.HeaderY) // Outline surface.SetDrawColor( 0, 0, 0, 150 ) surface.DrawOutlinedRect( xOffset, yOffset, boardWidth, boardHeight ) surface.SetDrawColor( 0, 0, 0, 50 ) surface.DrawOutlinedRect( xOffset-1, yOffset-1, boardWidth+2, boardHeight+2 ) local hostname = GetHostName() local gamemodeName = GAMEMODE.Name .. " - " .. GAMEMODE.Author surface.SetTextColor( 255, 255, 255, 255 ) if ( string.len(hostname) > 32 ) then surface.SetFont( "ScoreboardSub" ) else surface.SetFont( "ScoreboardHead" ) end local txWidth, txHeight = surface.GetTextSize( hostname ) local y = yOffset + 15 surface.SetTextPos(xOffset + (boardWidth / 2) - (txWidth/2), y) surface.DrawText( hostname ) y = y + txHeight + 2 surface.SetTextColor( 255, 255, 255, 255 ) surface.SetFont( "ScoreboardSub" ) local txWidth, txHeight = surface.GetTextSize( gamemodeName ) surface.SetTextPos(xOffset + (boardWidth / 2) - (txWidth/2), y) surface.DrawText( gamemodeName ) y = y + txHeight + 4 GAMEMODE.ScoreDesign.HeaderY = y - yOffset surface.SetDrawColor( 0, 0, 0, 100 ) surface.DrawRect( xOffset, y-1, boardWidth, 1) surface.SetDrawColor( 255, 255, 255, 20 ) surface.DrawRect( xOffset + boardWidth - (colWidth*1), y, colWidth, boardHeight-y+yOffset ) surface.SetDrawColor( 255, 255, 255, 20 ) surface.DrawRect( xOffset + boardWidth - (colWidth*3), y, colWidth, boardHeight-y+yOffset ) surface.SetFont( "ScoreboardText" ) local txWidth, txHeight = surface.GetTextSize( "W" ) surface.SetDrawColor( 0, 0, 0, 100 ) surface.DrawRect( xOffset, y, boardWidth, txHeight + 6 ) y = y + 2 surface.SetTextPos( xOffset + 16, y) surface.DrawText("#Name") surface.SetTextPos( xOffset + boardWidth - (colWidth*3) + 8, y) surface.DrawText("#Score") surface.SetTextPos( xOffset + boardWidth - (colWidth*2) + 8, y) surface.DrawText("#Deaths") surface.SetTextPos( xOffset + boardWidth - (colWidth*1) + 8, y) surface.DrawText("#Ping") y = y + txHeight + 4 local yPosition = y for team,info in pairs(ScoreboardInfo) do local teamText = info.TeamName .. " (" .. #info.Players .. " Players)" surface.SetFont( "ScoreboardText" ) surface.SetTextColor( 0, 0, 0, 255 ) txWidth, txHeight = surface.GetTextSize( teamText ) surface.SetDrawColor( info.Color.r, info.Color.g, info.Color.b, 255 ) surface.DrawRect( xOffset+1, yPosition, boardWidth-2, txHeight + 4) yPosition = yPosition + 2 surface.SetTextPos( xOffset + boardWidth/2 - txWidth/2, yPosition ) surface.DrawText( teamText ) yPosition = yPosition + 2 yPosition = yPosition + txHeight + 2 for index,plinfo in pairs(info.Players) do surface.SetFont( "ScoreboardText" ) surface.SetTextColor( info.Color.r, info.Color.g, info.Color.b, 200 ) surface.SetTextPos( xOffset + 16, yPosition ) txWidth, txHeight = surface.GetTextSize( plinfo.Name ) if (plinfo.PlayerObj == LocalPlayer()) then surface.SetDrawColor( info.Color.r, info.Color.g, info.Color.b, 50 ) surface.DrawRect( xOffset+1, yPosition, boardWidth - 2, txHeight + 2) surface.SetTextColor( info.Color.r, info.Color.g, info.Color.b, 255 ) end local px, py = xOffset + 16, yPosition local textcolor = Color( info.Color.r, info.Color.g, info.Color.b, alpha ) local shadowcolor = Color( 0, 0, 0, alpha * 0.8 ) draw.SimpleText( plinfo.Name, "ScoreboardText", px+1, py+1, shadowcolor ) draw.SimpleText( plinfo.Name, "ScoreboardText", px, py, textcolor ) px = xOffset + boardWidth - (colWidth*3) + 8 draw.SimpleText( plinfo.Frags, "ScoreboardText", px+1, py+1, shadowcolor ) draw.SimpleText( plinfo.Frags, "ScoreboardText", px, py, textcolor ) px = xOffset + boardWidth - (colWidth*2) + 8 draw.SimpleText( plinfo.Deaths, "ScoreboardText", px+1, py+1, shadowcolor ) draw.SimpleText( plinfo.Deaths, "ScoreboardText", px, py, textcolor ) px = xOffset + boardWidth - (colWidth*1) + 8 draw.SimpleText( plinfo.Ping, "ScoreboardText", px+1, py+1, shadowcolor ) draw.SimpleText( plinfo.Ping, "ScoreboardText", px, py, textcolor ) //surface.DrawText( plinfo.Name ) //surface.SetTextPos( xOffset + 16 + 2, yPosition + 2 ) //surface.SetTextColor( 0, 0, 0, 200 ) //surface.DrawText( plinfo.Name ) //surface.SetTextPos( xOffset + boardWidth - (colWidth*3) + 8, yPosition ) //surface.DrawText( plinfo.Frags ) //surface.SetTextPos( xOffset + boardWidth - (colWidth*2) + 8, yPosition ) //surface.DrawText( plinfo.Deaths ) //surface.SetTextPos( xOffset + boardWidth - (colWidth*1) + 8, yPosition ) //surface.DrawText( plinfo.Ping ) yPosition = yPosition + txHeight + 3 end end yPositio
neat
Nice work
2 seconds guys thats very fast 2 seconds guys thats very 2 seconds guys thats 2 seconds guys 2 seconds
I like it, it also remembers me somewhat of GM:Stranded (Rubat? :o). Does it work for multiple gamemodes? Like TTT, Murder, DarkRP, ... or does it need core editing? If so, could you put up a multi-functional version, or different versions for some 'popular' gamemodes, then there will be more downloads/likes, I belive!
[QUOTE=whitestar;50599445]I like it, it also remembers me somewhat of GM:Stranded (Rubat? :o). Does it work for multiple gamemodes? Like TTT, Murder, DarkRP, ... or does it need core editing? If so, could you put up a multi-functional version, or different versions for some 'popular' gamemodes, then there will be more downloads/likes, I belive![/QUOTE] it should work for any gamemode, it doesnt need core editing. im though, the only other time i tested it on was shinycows propkill gamemode (which uses sandbox as a base). ill test it on ttt in a second. EDIT: it doesn't show who the detective is in scoreboard [IMG]http://i.imgur.com/izwtkea.jpg[/IMG]
Sorry, you need to Log In to post a reply to this thread.