• TTT - Scoreboard ranks column/row
    81 replies, posted
Hi everyone! I've searched all over, and i cant find any way to add a new row in the scoreboard that reveals your Evolved Mod/ULX ranks. Im hosting a dedicated server, and installed/tried different admin mods. I know you dont like LUA noobs very much around here, but at least I've made som costum TTT weapons :smile: What I'm trying to acomplish is something like this: [IMG]http://i.imgur.com/Khhm6.jpg[/IMG] Im willing to install any admin mod if it allows me to do this. I know that the F2B server got this working. They Run ULX admin mod, and i also noticed that the server runs a "uteam.lua" (module?) even though this is already integrated in ULX. So they have probably made the UTeam add a column or something. (but I thought UTeam only worked with sandbox?) Hope that that helps a bit :smile: Any help will be very welcome! -Zaph
I wanted this a few days ago and after a quick google found this: [URL]http://facepunch.com/showthread.php?t=1101202[/URL] It's a bit messy to get working and requires a little work from yourself but I'm sure you can get it to work. :) Result: [url]http://puu.sh/1vjri[/url] (I chose not to have the 'rank' text, I think it's included in the thread I posted though)
[QUOTE=munch;38627478]I wanted this a few days ago and after a quick google found this: [URL]http://facepunch.com/showthread.php?t=1101202[/URL] It's a bit messy to get working and requires a little work from yourself but I'm sure you can get it to work. :) Result: [url]http://puu.sh/1vjri[/url] (I chose not to have the 'rank' text, I think it's included in the thread I posted though)[/QUOTE] You mean this? [CODE] ---- Scoreboard player score row, based on sandbox version include("sb_info.lua") local GetTranslation = LANG.GetTranslation local GetPTranslation = LANG.GetParamTranslation SB_ROW_HEIGHT = 24 --16 local PANEL = {} function PANEL:Init() -- cannot create info card until player state is known self.info = nil self.open = false self.cols = {} self.cols[1] = vgui.Create("Label", self) self.cols[1]:SetText(GetTranslation("sb_ping")) self.cols[2] = vgui.Create("Label", self) self.cols[2]:SetText(GetTranslation("sb_deaths")) self.cols[3] = vgui.Create("Label", self) self.cols[3]:SetText(GetTranslation("sb_score")) self.cols[5] = vgui.Create("Label", self) self.cols[5]:SetText("") if KARMA.IsEnabled() then self.cols[4] = vgui.Create("Label", self) self.cols[4]:SetText(GetTranslation("sb_karma")) end for _, c in ipairs(self.cols) do c:SetMouseInputEnabled(false) end self.tag = vgui.Create("Label", self) self.tag:SetText("") self.tag:SetMouseInputEnabled(false) self.sresult = vgui.Create("DImage", self) self.sresult:SetSize(16,16) self.sresult:SetMouseInputEnabled(false) self.avatar = vgui.Create( "AvatarImage", self ) self.avatar:SetSize(SB_ROW_HEIGHT, SB_ROW_HEIGHT) self.avatar:SetMouseInputEnabled(false) self.nick = vgui.Create("Label", self) self.nick:SetMouseInputEnabled(false) self:SetCursor( "hand" ) end local namecolor = { default = COLOR_WHITE, superadmin = Color(255,0,0,255), admin = Color(220, 180, 0, 255), dev = Color(100, 240, 105, 255), respected = Color(255,255,145), asshole = Color(145,75,123) }; function GM:TTTScoreboardColorForPlayer(ply) if not IsValid(ply) then return namecolor.default end if ply:SteamID() == "STEAM_0:0:1963640" then return namecolor.dev elseif ply:IsAdmin() and GetGlobalBool("ttt_highlight_admins", true) then return namecolor.admin end return namecolor.default end local function ColorForPlayer(ply) if IsValid(ply) then local c = hook.Call("TTTScoreboardColorForPlayer", GAMEMODE, ply) -- verify that we got a proper color if c and type(c) == "table" and c.r and c.b and c.g and c.a then return c else ErrorNoHalt("TTTScoreboardColorForPlayer hook returned something that isn't a color!\n") end end return namecolor.default end function PANEL:Paint() if not ValidEntity(self.Player) then return end -- if ( self.Player:GetFriendStatus() == "friend" ) then -- color = Color( 236, 181, 113, 255 ) -- end local ply = self.Player if ply:IsTraitor() then surface.SetDrawColor(255, 0, 0, 30) surface.DrawRect(0, 0, self:GetWide(), SB_ROW_HEIGHT) elseif ply:IsDetective() then surface.SetDrawColor(0, 0, 255, 30) surface.DrawRect(0, 0, self:GetWide(), SB_ROW_HEIGHT) end if ply == LocalPlayer() then surface.SetDrawColor( 200, 200, 200, math.Clamp(math.sin(RealTime() * 2) * 50, 0, 100)) surface.DrawRect(0, 0, self:GetWide(), SB_ROW_HEIGHT ) end return true end function PANEL:SetPlayer(ply) self.Player = ply self.avatar:SetPlayer(ply) if not self.info then local g = ScoreGroup(ply) if g == GROUP_TERROR and ply != LocalPlayer() then self.info = vgui.Create("TTTScorePlayerInfoTags", self) self.info:SetPlayer(ply) self:InvalidateLayout() elseif g == GROUP_FOUND or g == GROUP_NOTFOUND then self.info = vgui.Create("TTTScorePlayerInfoSearch", self) self.info:SetPlayer(ply) self:InvalidateLayout() end else self.info:SetPlayer(ply) self:InvalidateLayout() end self:UpdatePlayerData() end function PANEL:GetPlayer() return self.Player end function PANEL:UpdatePlayerData() if not IsValid(self.Player) then return end local ply = self.Player self.cols[1]:SetText(ply:Ping()) self.cols[2]:SetText(ply:Deaths()) self.cols[3]:SetText(ply:Frags()) if self.cols[4] then self.cols[4]:SetText(math.Round(ply:GetBaseKarma())) end self.nick:SetText(ply:Nick()) self.nick:SizeToContents() self.nick:SetFGColor(ColorForPlayer(ply)) local ptag = ply.sb_tag if ScoreGroup(ply) != GROUP_TERROR then ptag = nil end self.tag:SetText(ptag and GetTranslation(ptag.txt) or "") self.tag:SetFGColor(ptag and ptag.color or COLOR_WHITE) self.sresult:SetVisible(ply.search_result != nil) -- more blue if a detective searched them if ply.search_result and (LocalPlayer():IsDetective() or (not ply.search_result.show)) then self.sresult:SetImageColor(Color(200, 200, 255)) end -- cols are likely to need re-centering self:LayoutColumns() if self.info then self.info:UpdatePlayerData() end if ply:IsUserGroup( "superadmin" ) then self.cols[5]:SetText( "Super Admin" ) self.cols[5]:SetFGColor(namecolor.superadmin) elseif ply:IsUserGroup( "admin" ) then self.cols[5]:SetText( "Admin" ) self.cols[5]:SetFGColor(namecolor.admin) elseif ply:IsUserGroup( "guest" ) then self.cols[5]:SetText( "" ) elseif ply:IsUserGroup( "Asshole" ) then self.cols[5]:SetText( "Asshole" ) self.cols[5]:SetFGColor(namecolor.asshole) elseif ply:IsUserGroup( "guest2" ) then self.cols[5]:SetText( "Respected" ) self.cols[5]:SetFGColor(namecolor.respected) end end function PANEL:ApplySchemeSettings() for k,v in pairs(self.cols) do v:SetFont("treb_small") v:SetFGColor(COLOR_WHITE) end self.nick:SetFont("treb_small") self.nick:SetFGColor(ColorForPlayer(self.Player)) local ptag = self.Player and self.Player.sb_tag self.tag:SetFGColor(ptag and ptag.color or COLOR_WHITE) self.tag:SetFont("treb_small") self.sresult:SetImage("gui/silkicons/magnifier") self.sresult:SetImageColor(Color(170, 170, 170, 150)) end function PANEL:LayoutColumns() for k,v in ipairs(self.cols) do if k == 5 then v:SizeToContents() v:SetPos(self:GetWide() - (80*k) - v:GetWide()/2, (SB_ROW_HEIGHT - v:GetTall()) / 2) else v:SizeToContents() v:SetPos(self:GetWide() - (50*k) - v:GetWide()/2, (SB_ROW_HEIGHT - v:GetTall()) / 2) end end self.tag:SizeToContents() self.tag:SetPos(self:GetWide() - (50 * 6) - self.tag:GetWide()/2, (SB_ROW_HEIGHT - self.tag:GetTall()) / 2) self.sresult:SetPos(self:GetWide() - (50*6) - 8, (SB_ROW_HEIGHT - 16) / 2) end function PANEL:PerformLayout() self.avatar:SetPos(0,0) self.avatar:SetSize(SB_ROW_HEIGHT,SB_ROW_HEIGHT) if not self.open then self:SetSize(self:GetWide(), SB_ROW_HEIGHT) if self.info then self.info:SetVisible(false) end elseif self.info then self:SetSize(self:GetWide(), 100 + SB_ROW_HEIGHT) self.info:SetVisible(true) self.info:SetPos(5, SB_ROW_HEIGHT + 5) self.info:SetSize(self:GetWide(), 100) self.info:PerformLayout() self:SetSize(self:GetWide(), SB_ROW_HEIGHT + self.info:GetTall()) end self.nick:SizeToContents() self.nick:SetPos(SB_ROW_HEIGHT + 10, (SB_ROW_HEIGHT - self.nick:GetTall()) / 2) self:LayoutColumns() end function PANEL:DoClick(x, y) self:SetO
for ValidEntity change it to IsValid. I believe this one is outdated. You have to make it so it works with the latest SVN for TTT since BadKing added a icon for muting players in the scoreboard. Just look at what's changed and fix them accordingly. And I believe SetFGColor has changed to SetTextColor
Thank you for guiding me in the right direction! I will begin this task tomorrow, got to sleep (have a math final in the morning) Will report back tomorrow!
Ok so i tried to redo this to work with Gmod13. This is the original file from BadKing [CODE] ---- Scoreboard player score row, based on sandbox version include("sb_info.lua") local GetTranslation = LANG.GetTranslation local GetPTranslation = LANG.GetParamTranslation SB_ROW_HEIGHT = 24 --16 local PANEL = {} function PANEL:Init() -- cannot create info card until player state is known self.info = nil self.open = false self.cols = {} self.cols[1] = vgui.Create("DLabel", self) self.cols[1]:SetText(GetTranslation("sb_ping")) self.cols[2] = vgui.Create("DLabel", self) self.cols[2]:SetText(GetTranslation("sb_deaths")) self.cols[3] = vgui.Create("DLabel", self) self.cols[3]:SetText(GetTranslation("sb_score")) if KARMA.IsEnabled() then self.cols[4] = vgui.Create("DLabel", self) self.cols[4]:SetText(GetTranslation("sb_karma")) end for _, c in ipairs(self.cols) do c:SetMouseInputEnabled(false) end self.tag = vgui.Create("DLabel", self) self.tag:SetText("") self.tag:SetMouseInputEnabled(false) self.sresult = vgui.Create("DImage", self) self.sresult:SetSize(16,16) self.sresult:SetMouseInputEnabled(false) self.avatar = vgui.Create( "AvatarImage", self ) self.avatar:SetSize(SB_ROW_HEIGHT, SB_ROW_HEIGHT) self.avatar:SetMouseInputEnabled(false) self.nick = vgui.Create("DLabel", self) self.nick:SetMouseInputEnabled(false) self.voice = vgui.Create("DImageButton", self) self.voice:SetSize(16,16) self:SetCursor( "hand" ) end local namecolor = { default = COLOR_WHITE, admin = Color(220, 180, 0, 255), dev = Color(100, 240, 105, 255) }; function GM:TTTScoreboardColorForPlayer(ply) if not IsValid(ply) then return namecolor.default end if ply:SteamID() == "STEAM_0:0:1963640" then return namecolor.dev elseif ply:IsAdmin() and GetGlobalBool("ttt_highlight_admins", true) then return namecolor.admin end return namecolor.default end local function ColorForPlayer(ply) if IsValid(ply) then local c = hook.Call("TTTScoreboardColorForPlayer", GAMEMODE, ply) -- verify that we got a proper color if c and type(c) == "table" and c.r and c.b and c.g and c.a then return c else ErrorNoHalt("TTTScoreboardColorForPlayer hook returned something that isn't a color!\n") end end return namecolor.default end function PANEL:Paint() if not IsValid(self.Player) then return end -- if ( self.Player:GetFriendStatus() == "friend" ) then -- color = Color( 236, 181, 113, 255 ) -- end local ply = self.Player if ply:IsTraitor() then surface.SetDrawColor(255, 0, 0, 30) surface.DrawRect(0, 0, self:GetWide(), SB_ROW_HEIGHT) elseif ply:IsDetective() then surface.SetDrawColor(0, 0, 255, 30) surface.DrawRect(0, 0, self:GetWide(), SB_ROW_HEIGHT) end if ply == LocalPlayer() then surface.SetDrawColor( 200, 200, 200, math.Clamp(math.sin(RealTime() * 2) * 50, 0, 100)) surface.DrawRect(0, 0, self:GetWide(), SB_ROW_HEIGHT ) end return true end function PANEL:SetPlayer(ply) self.Player = ply self.avatar:SetPlayer(ply) if not self.info then local g = ScoreGroup(ply) if g == GROUP_TERROR and ply != LocalPlayer() then self.info = vgui.Create("TTTScorePlayerInfoTags", self) self.info:SetPlayer(ply) self:InvalidateLayout() elseif g == GROUP_FOUND or g == GROUP_NOTFOUND then self.info = vgui.Create("TTTScorePlayerInfoSearch", self) self.info:SetPlayer(ply) self:InvalidateLayout() end else self.info:SetPlayer(ply) self:InvalidateLayout() end self.voice.DoClick = function() if IsValid(ply) and ply != LocalPlayer() then ply:SetMuted(not ply:IsMuted()) end end self:UpdatePlayerData() end function PANEL:GetPlayer() return self.Player end function PANEL:UpdatePlayerData() if not IsValid(self.Player) then return end local ply = self.Player self.cols[1]:SetText(ply:Ping()) self.cols[2]:SetText(ply:Deaths()) self.cols[3]:SetText(ply:Frags()) if self.cols[4] then self.cols[4]:SetText(math.Round(ply:GetBaseKarma())) end self.nick:SetText(ply:Nick()) self.nick:SizeToContents() self.nick:SetTextColor(ColorForPlayer(ply)) local ptag = ply.sb_tag if ScoreGroup(ply) != GROUP_TERROR then ptag = nil end self.tag:SetText(ptag and GetTranslation(ptag.txt) or "") self.tag:SetTextColor(ptag and ptag.color or COLOR_WHITE) self.sresult:SetVisible(ply.search_result != nil) -- more blue if a detective searched them if ply.search_result and (LocalPlayer():IsDetective() or (not ply.search_result.show)) then self.sresult:SetImageColor(Color(200, 200, 255)) end -- cols are likely to need re-centering self:LayoutColumns() if self.info then self.info:UpdatePlayerData() end if self.Player != LocalPlayer() then local muted = self.Player:IsMuted() self.voice:SetImage(muted and "icon16/sound_mute.png" or "icon16/sound.png") else self.voice:Hide() end end function PANEL:ApplySchemeSettings() for k,v in pairs(self.cols) do v:SetFont("treb_small") v:SetTextColor(COLOR_WHITE) end self.nick:SetFont("treb_small") self.nick:SetTextColor(ColorForPlayer(self.Player)) local ptag = self.Player and self.Player.sb_tag self.tag:SetTextColor(ptag and ptag.color or COLOR_WHITE) self.tag:SetFont("treb_small") self.sresult:SetImage("icon16/magnifier.png") self.sresult:SetImageColor(Color(170, 170, 170, 150)) end function PANEL:LayoutColumns() for k,v in ipairs(self.cols) do v:SizeToContents() v:SetPos(self:GetWide() - (50*k) - v:GetWide()/2, (SB_ROW_HEIGHT - v:GetTall()) / 2) end self.tag:SizeToContents() self.tag:SetPos(self:GetWide() - (50 * 6) - self.tag:GetWide()/2, (SB_ROW_HEIGHT - self.tag:GetTall()) / 2) self.sresult:SetPos(self:GetWide() - (50*6) - 8, (SB_ROW_HEIGHT - 16) / 2) end function PANEL:PerformLayout() self.avatar:SetPos(0,0) self.avatar:SetSize(SB_ROW_HEIGHT,SB_ROW_HEIGHT) if not self.open then self:SetSize(self:GetWide(), SB_ROW_HEIGHT) if self.info then self.info:SetVisible(false) end elseif self.info then self:SetSize(self:GetWide(), 100 + SB_ROW_HEIGHT) self.info:SetVisible(true) self.info:SetPos(5, SB_ROW_HEIGHT + 5) self.info:SetSize(self:GetWide(), 100) self.info:PerformLayout() self:SetSize(self:GetWide(), SB_ROW_HEIGHT + self.info:GetTall()) end self.nick:SizeToContents() self.nick:SetPos(SB_ROW_HEIGHT + 10, (SB_ROW_HEIGHT - self.nick:GetTall()) / 2) self:LayoutColumns() self.voice:SetVisible(not self.open) self.voice:SetSize(16, 16) self.voice:DockMargin(4, 4, 4, 4) self.voice:Dock(RIGHT) end function PANEL:DoClick(x, y) self:SetOpen(not self.open) end function PANEL:SetOpen(o) if self.open then surface.PlaySound("ui/buttonclickrelease.wav") else surface.PlaySound("ui/buttonclick.wav") end self.open = o self:PerformLayout() self:GetParent():PerformLayout() sboard_panel:PerformLayout() end function PANEL:DoRightClick() end vgui.Register( "TTTScorePlayerRow", PANEL, "Button" ) [/CODE] And this is what mine looks like ATM: [CODE] ---- Scoreboard player score row, based on sandbox version include("sb_info.lua") local GetTranslation = LANG.GetTranslation local GetPTranslation = LANG.GetParamTranslation SB_ROW_HEIGHT = 24 --16 local PANEL = {} function PANEL:Init() -- cannot create info card until player state is known self.info = nil self.open = false self.cols = {} se
[QUOTE=zapha;38637501]Ok so i tried to redo this to work with Gmod13. This is the original file from BadKing [CODE] ---- Scoreboard player score row, based on sandbox version include("sb_info.lua") local GetTranslation = LANG.GetTranslation local GetPTranslation = LANG.GetParamTranslation SB_ROW_HEIGHT = 24 --16 local PANEL = {} function PANEL:Init() -- cannot create info card until player state is known self.info = nil self.open = false self.cols = {} self.cols[1] = vgui.Create("DLabel", self) self.cols[1]:SetText(GetTranslation("sb_ping")) self.cols[2] = vgui.Create("DLabel", self) self.cols[2]:SetText(GetTranslation("sb_deaths")) self.cols[3] = vgui.Create("DLabel", self) self.cols[3]:SetText(GetTranslation("sb_score")) if KARMA.IsEnabled() then self.cols[4] = vgui.Create("DLabel", self) self.cols[4]:SetText(GetTranslation("sb_karma")) end for _, c in ipairs(self.cols) do c:SetMouseInputEnabled(false) end self.tag = vgui.Create("DLabel", self) self.tag:SetText("") self.tag:SetMouseInputEnabled(false) self.sresult = vgui.Create("DImage", self) self.sresult:SetSize(16,16) self.sresult:SetMouseInputEnabled(false) self.avatar = vgui.Create( "AvatarImage", self ) self.avatar:SetSize(SB_ROW_HEIGHT, SB_ROW_HEIGHT) self.avatar:SetMouseInputEnabled(false) self.nick = vgui.Create("DLabel", self) self.nick:SetMouseInputEnabled(false) self.voice = vgui.Create("DImageButton", self) self.voice:SetSize(16,16) self:SetCursor( "hand" ) end local namecolor = { default = COLOR_WHITE, admin = Color(220, 180, 0, 255), dev = Color(100, 240, 105, 255) }; function GM:TTTScoreboardColorForPlayer(ply) if not IsValid(ply) then return namecolor.default end if ply:SteamID() == "STEAM_0:0:1963640" then return namecolor.dev elseif ply:IsAdmin() and GetGlobalBool("ttt_highlight_admins", true) then return namecolor.admin end return namecolor.default end local function ColorForPlayer(ply) if IsValid(ply) then local c = hook.Call("TTTScoreboardColorForPlayer", GAMEMODE, ply) -- verify that we got a proper color if c and type(c) == "table" and c.r and c.b and c.g and c.a then return c else ErrorNoHalt("TTTScoreboardColorForPlayer hook returned something that isn't a color!\n") end end return namecolor.default end function PANEL:Paint() if not IsValid(self.Player) then return end -- if ( self.Player:GetFriendStatus() == "friend" ) then -- color = Color( 236, 181, 113, 255 ) -- end local ply = self.Player if ply:IsTraitor() then surface.SetDrawColor(255, 0, 0, 30) surface.DrawRect(0, 0, self:GetWide(), SB_ROW_HEIGHT) elseif ply:IsDetective() then surface.SetDrawColor(0, 0, 255, 30) surface.DrawRect(0, 0, self:GetWide(), SB_ROW_HEIGHT) end if ply == LocalPlayer() then surface.SetDrawColor( 200, 200, 200, math.Clamp(math.sin(RealTime() * 2) * 50, 0, 100)) surface.DrawRect(0, 0, self:GetWide(), SB_ROW_HEIGHT ) end return true end function PANEL:SetPlayer(ply) self.Player = ply self.avatar:SetPlayer(ply) if not self.info then local g = ScoreGroup(ply) if g == GROUP_TERROR and ply != LocalPlayer() then self.info = vgui.Create("TTTScorePlayerInfoTags", self) self.info:SetPlayer(ply) self:InvalidateLayout() elseif g == GROUP_FOUND or g == GROUP_NOTFOUND then self.info = vgui.Create("TTTScorePlayerInfoSearch", self) self.info:SetPlayer(ply) self:InvalidateLayout() end else self.info:SetPlayer(ply) self:InvalidateLayout() end self.voice.DoClick = function() if IsValid(ply) and ply != LocalPlayer() then ply:SetMuted(not ply:IsMuted()) end end self:UpdatePlayerData() end function PANEL:GetPlayer() return self.Player end function PANEL:UpdatePlayerData() if not IsValid(self.Player) then return end local ply = self.Player self.cols[1]:SetText(ply:Ping()) self.cols[2]:SetText(ply:Deaths()) self.cols[3]:SetText(ply:Frags()) if self.cols[4] then self.cols[4]:SetText(math.Round(ply:GetBaseKarma())) end self.nick:SetText(ply:Nick()) self.nick:SizeToContents() self.nick:SetTextColor(ColorForPlayer(ply)) local ptag = ply.sb_tag if ScoreGroup(ply) != GROUP_TERROR then ptag = nil end self.tag:SetText(ptag and GetTranslation(ptag.txt) or "") self.tag:SetTextColor(ptag and ptag.color or COLOR_WHITE) self.sresult:SetVisible(ply.search_result != nil) -- more blue if a detective searched them if ply.search_result and (LocalPlayer():IsDetective() or (not ply.search_result.show)) then self.sresult:SetImageColor(Color(200, 200, 255)) end -- cols are likely to need re-centering self:LayoutColumns() if self.info then self.info:UpdatePlayerData() end if self.Player != LocalPlayer() then local muted = self.Player:IsMuted() self.voice:SetImage(muted and "icon16/sound_mute.png" or "icon16/sound.png") else self.voice:Hide() end end function PANEL:ApplySchemeSettings() for k,v in pairs(self.cols) do v:SetFont("treb_small") v:SetTextColor(COLOR_WHITE) end self.nick:SetFont("treb_small") self.nick:SetTextColor(ColorForPlayer(self.Player)) local ptag = self.Player and self.Player.sb_tag self.tag:SetTextColor(ptag and ptag.color or COLOR_WHITE) self.tag:SetFont("treb_small") self.sresult:SetImage("icon16/magnifier.png") self.sresult:SetImageColor(Color(170, 170, 170, 150)) end function PANEL:LayoutColumns() for k,v in ipairs(self.cols) do v:SizeToContents() v:SetPos(self:GetWide() - (50*k) - v:GetWide()/2, (SB_ROW_HEIGHT - v:GetTall()) / 2) end self.tag:SizeToContents() self.tag:SetPos(self:GetWide() - (50 * 6) - self.tag:GetWide()/2, (SB_ROW_HEIGHT - self.tag:GetTall()) / 2) self.sresult:SetPos(self:GetWide() - (50*6) - 8, (SB_ROW_HEIGHT - 16) / 2) end function PANEL:PerformLayout() self.avatar:SetPos(0,0) self.avatar:SetSize(SB_ROW_HEIGHT,SB_ROW_HEIGHT) if not self.open then self:SetSize(self:GetWide(), SB_ROW_HEIGHT) if self.info then self.info:SetVisible(false) end elseif self.info then self:SetSize(self:GetWide(), 100 + SB_ROW_HEIGHT) self.info:SetVisible(true) self.info:SetPos(5, SB_ROW_HEIGHT + 5) self.info:SetSize(self:GetWide(), 100) self.info:PerformLayout() self:SetSize(self:GetWide(), SB_ROW_HEIGHT + self.info:GetTall()) end self.nick:SizeToContents() self.nick:SetPos(SB_ROW_HEIGHT + 10, (SB_ROW_HEIGHT - self.nick:GetTall()) / 2) self:LayoutColumns() self.voice:SetVisible(not self.open) self.voice:SetSize(16, 16) self.voice:DockMargin(4, 4, 4, 4) self.voice:Dock(RIGHT) end function PANEL:DoClick(x, y) self:SetOpen(not self.open) end function PANEL:SetOpen(o) if self.open then surface.PlaySound("ui/buttonclickrelease.wav") else surface.PlaySound("ui/buttonclick.wav") end self.open = o self:PerformLayout() self:GetParent():PerformLayout() sboard_panel:PerformLayout() end function PANEL:DoRightClick() end vgui.Register( "TTTScorePlayerRow", PANEL, "Button" ) [/CODE] And this is what mine looks like ATM: [CODE] ---- Scoreboard player score row, based on sandbox version include("sb_info.lua") local GetTranslation = LANG.GetTranslation local GetPTranslation = LANG.GetParamTranslation SB_ROW_HEIGHT = 24 --16 local PANEL = {} function PANEL:Init() -- cannot create info card until player state is known self.info = nil self.open = false
Thank you for a most helpfull awnser! :) [QUOTE]All you really had to do is look at how the other ones were set and just follow how it's being created. :/.[/QUOTE] This is what i tried to do. I used the lates sb_row fro badking, but still got all the errors :/ I will try this as soon as i get home :D
[QUOTE]Just do this Go to your terrortown/gamemode/vgui/sb_row.lua Add this below function PANEL:Init() 1 2 self.cols[5] = vgui.Create("DLabel", self) self.cols[5]:SetText("Rank") Add this below function PANEL:UpdatePlayerData() 1 2 3 4 if ply:IsUserGroup("superadmin") then self.cols[5]:SetText("SUPERADMIN") self.cols[5]:SetTextColor(Color(255,0,0,255)) end Go to your terrortown/gamemode/vgui/sb_main.lua Find under function PANEL:Init() 1 2 self.cols[3] = vgui.Create( "DLabel", self ) self.cols[3]:SetText( GetTranslation("sb_score") ) Add this under that 1 2 self.cols[5] = vgui.Create( "DLabel", self ) self.cols[5]:SetText("Rank") All you really had to do is look at how the other ones were set and just follow how it's being created. :/. Be sure to do this on the latest svn for terrortown that hasn't been edited.[/QUOTE] I love you! Works perfectly. Thank you!
[QUOTE=kaos2100;38638634]Just do this Go to your terrortown/gamemode/vgui/sb_row.lua Add this below function PANEL:Init() [lua] self.cols[5] = vgui.Create("DLabel", self) self.cols[5]:SetText("Rank")[/lua] Add this below function PANEL:UpdatePlayerData() [lua] if ply:IsUserGroup("superadmin") then self.cols[5]:SetText("SUPERADMIN") self.cols[5]:SetTextColor(Color(255,0,0,255)) end [/lua] Go to your terrortown/gamemode/vgui/sb_main.lua Find under function PANEL:Init() [lua] self.cols[3] = vgui.Create( "DLabel", self ) self.cols[3]:SetText( GetTranslation("sb_score") )[/lua] Add this under that [lua] self.cols[5] = vgui.Create( "DLabel", self ) self.cols[5]:SetText("Rank")[/lua] All you really had to do is look at how the other ones were set and just follow how it's being created. :/. Be sure to do this on the latest svn for terrortown that hasn't been edited.[/QUOTE] [ERROR] gamemodes/terrortown/gamemode/vgui/sb_main.lua:78: attempt to index field 'cols' (a nil value) 1. Init - gamemodes/terrortown/gamemode/vgui/sb_main.lua:78 2. Create - lua/includes/extensions/client/panel/scriptedpanels.lua:153 3. ScoreboardCreate - gamemodes/terrortown/gamemode/cl_scoreboard.lua:27 4. unknown - gamemodes/terrortown/gamemode/cl_scoreboard.lua:34 [ERROR] gamemodes/terrortown/gamemode/vgui/sb_main.lua:247: attempt to index field 'hostdesc' (a nil value) 1. unknown - gamemodes/terrortown/gamemode/vgui/sb_main.lua:247 [ERROR] gamemodes/terrortown/gamemode/vgui/sb_main.lua:184: attempt to index field 'ply_groups' (a nil value) 1. unknown - gamemodes/terrortown/gamemode/vgui/sb_main.lua:184 [ERROR] gamemodes/terrortown/gamemode/vgui/sb_main.lua:184: attempt to index field 'ply_groups' (a nil value) 1. unknown - gamemodes/terrortown/gamemode/vgui/sb_main.lua:184
[QUOTE=kaos2100;38638634]Just do this Go to your terrortown/gamemode/vgui/sb_row.lua Add this below function PANEL:Init() [lua] self.cols[5] = vgui.Create("DLabel", self) self.cols[5]:SetText("Rank")[/lua] Add this below function PANEL:UpdatePlayerData() [lua] if ply:IsUserGroup("superadmin") then self.cols[5]:SetText("SUPERADMIN") self.cols[5]:SetTextColor(Color(255,0,0,255)) end [/lua] Go to your terrortown/gamemode/vgui/sb_main.lua Find under function PANEL:Init() [lua] self.cols[3] = vgui.Create( "DLabel", self ) self.cols[3]:SetText( GetTranslation("sb_score") )[/lua] Add this under that [lua] self.cols[5] = vgui.Create( "DLabel", self ) self.cols[5]:SetText("Rank")[/lua] All you really had to do is look at how the other ones were set and just follow how it's being created. :/. Be sure to do this on the latest svn for terrortown that hasn't been edited.[/QUOTE] Thanks, This works fine. But How can I add it for more groups. Kind Regards.
[QUOTE=RockstarC;38843097]Thanks, This works fine. But How can I add it for more groups. Kind Regards.[/QUOTE] if ply:IsUserGroup("superadmin") then self.cols[5]:SetText("SUPERADMIN") self.cols[5]:SetTextColor(Color(255,0,0,255)) end I know it's super hard to read LUA but just give it another shot :)
I already made it say "Owner" for me but everyone else just has "Rank" I need to add mod admin etc.
[LUA] if ply:IsUserGroup("guest") then self.cols[5]:SetText("") self.cols[5]:SetTextColor(Color(255,0,0,255)) end [/LUA] That's for Guests (Why don't you try)
Afraid to say that this code was a mess and it took me a while to sort it out... but i did You can replace the titles and colours and whatnot from 163-201 [url]http://pastebin.com/iTgRm0BZ[/url] Have any questions feel free to ask. (this is the exact code i am using on my sever and it works fine)
Hello im having a problem with mine, i put the code in and its showing ranks ok but they are very far right of the score board Click link to see what i mean [url]http://i.imgur.com/k8dGB.jpg[/url] does anyone know how to correct this ? i used this code [QUOTE=kaos2100;38638634]Just do this Go to your terrortown/gamemode/vgui/sb_row.lua Add this below function PANEL:Init() [lua] self.cols[5] = vgui.Create("DLabel", self) self.cols[5]:SetText("Rank")[/lua] Add this below function PANEL:UpdatePlayerData() [lua] if ply:IsUserGroup("superadmin") then self.cols[5]:SetText("SUPERADMIN") self.cols[5]:SetTextColor(Color(255,0,0,255)) end [/lua] Go to your terrortown/gamemode/vgui/sb_main.lua Find under function PANEL:Init() [lua] self.cols[3] = vgui.Create( "DLabel", self ) self.cols[3]:SetText( GetTranslation("sb_score") )[/lua] Add this under that [lua] self.cols[5] = vgui.Create( "DLabel", self ) self.cols[5]:SetText("Rank")[/lua] All you really had to do is look at how the other ones were set and just follow how it's being created. :/. Be sure to do this on the latest svn for terrortown that hasn't been edited.[/QUOTE]
bump :)
I would love it if someone could help him move it in the middle, Would be a lot of help.
in your sb_row.lua you should see this function [lua]function PANEL:LayoutColumns() for k,v in ipairs(self.cols) do v:SizeToContents() v:SetPos(self:GetWide() - (50*k) - v:GetWide()/2, (SB_ROW_HEIGHT - v:GetTall()) / 2) end [/lua] Change it like this [lua]function PANEL:LayoutColumns() for k,v in ipairs(self.cols) do v:SizeToContents() v:SetPos(self:GetWide() - (50*k) - v:GetWide()/2, (SB_ROW_HEIGHT - v:GetTall()) / 2) if v == self.cols[5] then v:SetPos(self:GetWide() - (85*k) - v:GetWide()/2, (SB_ROW_HEIGHT - v:GetTall()) / 2) end end[/lua] Then in your sb_main.lua file [lua]function PANEL:PerformLayout() ... ... ... for k,v in ipairs(self.cols) do v:SizeToContents() v:SetPos( w - (50*k) - v:GetWide()/2 - 8, cy) end end [/lua] Edit so it looks like [lua] for k,v in ipairs(self.cols) do v:SizeToContents() v:SetPos( w - (50*k) - v:GetWide()/2 - 8, cy) if v == self.cols[5] then v:SetPos( w - 85*k) - v:GetWide()/2 - 8, cy) end end [/lua] Just change around the "85" if you want to move it to the left more or right more. You increase the number to move it to the left more and you decrease the number to move it to the right more.
[QUOTE=kaos2100;38892792]in your sb_row.lua you should see this function [lua]function PANEL:LayoutColumns() for k,v in ipairs(self.cols) do v:SizeToContents() v:SetPos(self:GetWide() - (50*k) - v:GetWide()/2, (SB_ROW_HEIGHT - v:GetTall()) / 2) end [/lua] Change it like this [lua]function PANEL:LayoutColumns() for k,v in ipairs(self.cols) do v:SizeToContents() v:SetPos(self:GetWide() - (50*k) - v:GetWide()/2, (SB_ROW_HEIGHT - v:GetTall()) / 2) if v == self.cols[5] then v:SetPos(self:GetWide() - (85*k) - v:GetWide()/2, (SB_ROW_HEIGHT - v:GetTall()) / 2) end end[/lua] Just change around the "85" if you want to move it to the left more or right more. You increase the number to move it to the left more and you decrease the number to move it to the right more.[/QUOTE] That did not work, well it did but it didnt move the "rank" only moved the title
[QUOTE=ideal-gaming;38893235]That did not work[/QUOTE] Works fine for me. Post how you set yours? Post your sb_main.lua and sb_row.lua Edited my post. You have to edit the sb_main.lua as well to move the word "Rank" or whatever as well.
I changed the sb_main.lua and now it just returns with this error [ERROR] gamemodes/terrortown/gamemode/cl_scoreboard.lua:39: attempt to index global 'sboard_panel' (a nil value) 1. unknown - gamemodes/terrortown/gamemode/cl_scoreboard.lua:39 here is my code sb_main [lua] ---- VGUI panel version of the scoreboard, based on TEAM GARRY's sandbox mode ---- scoreboard. local surface = surface local draw = draw local math = math local string = string local vgui = vgui local GetTranslation = LANG.GetTranslation local GetPTranslation = LANG.GetParamTranslation include("sb_team.lua") include("sb_team.lua") surface.CreateFont("cool_small", {font = "coolvetica", size = 20, weight = 400}) surface.CreateFont("cool_large", {font = "coolvetica", size = 24, weight = 400}) surface.CreateFont("treb_small", {font = "Trebuchet18", size = 14, weight = 700}) local logo = surface.GetTextureID("VGUI/ttt/score_logo") local PANEL = {} local max = math.max local floor = math.floor local function UntilMapChange() local rounds_left = max(0, GetGlobalInt("ttt_rounds_left", 6)) local time_left = floor(max(0, ((GetGlobalInt("ttt_time_limit_minutes") or 60) * 60) - CurTime())) local h = floor(time_left / 3600) time_left = time_left - floor(h * 3600) local m = floor(time_left / 60) time_left = time_left - floor(m * 60) local s = floor(time_left) return rounds_left, string.format("%02i:%02i:%02i", h, m, s) end GROUP_TERROR = 1 GROUP_NOTFOUND = 2 GROUP_FOUND = 3 GROUP_SPEC = 4 GROUP_COUNT = 4 function ScoreGroup(p) if not IsValid(p) then return -1 end -- will not match any group panel if DetectiveMode() then if p:IsSpec() and (not p:Alive()) then if p:GetNWBool("body_found", false) then return GROUP_FOUND else local client = LocalPlayer() -- To terrorists, missing players show as alive if client:IsSpec() or client:IsActiveTraitor() or ((GAMEMODE.round_state != ROUND_ACTIVE) and client:IsTerror()) then return GROUP_NOTFOUND else return GROUP_TERROR end end end end return p:IsTerror() and GROUP_TERROR or GROUP_SPEC end function PANEL:Init() self.hostdesc = vgui.Create("DLabel", self) self.hostdesc:SetText(GetTranslation("sb_playing")) self.hostdesc:SetContentAlignment(9) self.hostname = vgui.Create( "DLabel", self ) self.hostname:SetText( GetHostName() ) self.hostname:SetContentAlignment(6) self.mapchange = vgui.Create("DLabel", self) self.mapchange:SetText("Map changes in 00 rounds or in 00:00:00") self.mapchange:SetContentAlignment(9) self.mapchange.Think = function (sf) local r, t = UntilMapChange() sf:SetText(GetPTranslation("sb_mapchange", {num = r, time = t})) sf:SizeToContents() end self.ply_frame = vgui.Create( "TTTPlayerFrame", self ) self.ply_groups = {} local t = vgui.Create("TTTScoreGroup", self.ply_frame:GetCanvas()) t:SetGroupInfo(GetTranslation("terrorists"), Color(0,200,0,100), GROUP_TERROR) self.ply_groups[GROUP_TERROR] = t t = vgui.Create("TTTScoreGroup", self.ply_frame:GetCanvas()) t:SetGroupInfo(GetTranslation("spectators"), Color(200, 200, 0, 100), GROUP_SPEC) self.ply_groups[GROUP_SPEC] = t if DetectiveMode() then t = vgui.Create("TTTScoreGroup", self.ply_frame:GetCanvas()) t:SetGroupInfo(GetTranslation("sb_mia"), Color(130, 190, 130, 100), GROUP_NOTFOUND) self.ply_groups[GROUP_NOTFOUND] = t t = vgui.Create("TTTScoreGroup", self.ply_frame:GetCanvas()) t:SetGroupInfo(GetTranslation("sb_confirmed"), Color(130, 170, 10, 100), GROUP_FOUND) self.ply_groups[GROUP_FOUND] = t end -- the various score column headers self.cols = {} self.cols[1] = vgui.Create( "DLabel", self ) self.cols[1]:SetText( GetTranslation("sb_ping") ) self.cols[2] = vgui.Create( "DLabel", self ) self.cols[2]:SetText( GetTranslation("sb_deaths") ) self.cols[3] = vgui.Create( "DLabel", self ) self.cols[3]:SetText( GetTranslation("sb_score") ) self.cols[5] = vgui.Create( "DLabel", self ) self.cols[5]:SetText("Rank") if KARMA.IsEnabled() then self.cols[4] = vgui.Create("DLabel", self) self.cols[4]:SetText(GetTranslation("sb_karma")) end self:UpdateScoreboard() self:StartUpdateTimer() end function PANEL:StartUpdateTimer() if not timer.Exists("TTTScoreboardUpdater") then timer.Create( "TTTScoreboardUpdater", 0.3, 0, function() local pnl = GAMEMODE:GetScoreboardPanel() if IsValid(pnl) then pnl:UpdateScoreboard() end end) end end local colors = { bg = Color(30,30,30, 235), bar = Color(220,180,0,255) }; local y_logo_off = 72 function PANEL:Paint() -- Logo sticks out, so always offset bg draw.RoundedBox( 8, 0, y_logo_off, self:GetWide(), self:GetTall() - y_logo_off, colors.bg) -- Server name is outlined by orange/gold area draw.RoundedBox( 8, 0, y_logo_off + 25, self:GetWide(), 32, colors.bar) -- TTT Logo surface.SetTexture( logo ) surface.SetDrawColor( 255, 255, 255, 255 ) surface.DrawTexturedRect( 5, 0, 256, 256 ) end function PANEL:PerformLayout() -- position groups and find their total size local gy = 0 -- can't just use pairs (undefined ordering) or ipairs (group 2 and 3 might not exist) for i=1, GROUP_COUNT do local group = self.ply_groups[i] if ValidPanel(group) then if group:HasRows() then group:SetVisible(true) group:SetPos(0, gy) group:SetSize(self.ply_frame:GetWide(), group:GetTall()) group:InvalidateLayout() gy = gy + group:GetTall() + 5 else group:SetVisible(false) end end end self.ply_frame:GetCanvas():SetSize(self.ply_frame:GetCanvas():GetWide(), gy) local h = y_logo_off + 110 + self.ply_frame:GetCanvas():GetTall() -- if we will have to clamp our height, enable the mouse so player can scroll local scrolling = h > ScrH() * 0.95 -- gui.EnableScreenClicker(scrolling) self.ply_frame:SetScroll(scrolling) h = math.Clamp(h, 110 + y_logo_off, ScrH() * 0.95) local w = math.max(ScrW() * 0.6, 640) self:SetSize(w, h) self:SetPos( (ScrW() - w) / 2, math.min(72, (ScrH() - h) / 4)) self.ply_frame:SetPos(8, y_logo_off + 109) self.ply_frame:SetSize(self:GetWide() - 16, self:GetTall() - 109 - y_logo_off - 5) -- server stuff self.hostdesc:SizeToContents() self.hostdesc:SetPos(w - self.hostdesc:GetWide() - 8, y_logo_off + 5) local hw = w - 180 - 8 self.hostname:SetSize(hw, 32) self.hostname:SetPos(w - self.hostname:GetWide() - 8, y_logo_off + 27) surface.SetFont("cool_large") local hname = self.hostname:GetValue() local tw, _ = surface.GetTextSize(hname) while tw > hw do hname = string.sub(hname, 1, -6) .. "..." tw, th = surface.GetTextSize(hname) end self.hostname:SetText(hname) self.mapchange:SizeToContents() self.mapchange:SetPos(w - self.mapchange:GetWide() - 8, y_logo_off + 60) -- score columns local cy = y_logo_off + 90 for k,v in ipairs(self.cols) do v:SizeToContents() v:SetPos( w - (50*k) - v:GetWide()/2 - 8, cy) if v == self.cols[5] then v:SetPos( w - 85*k) - v:GetWide()/2 - 8, cy) end end function PANEL:ApplySchemeSettings() self.hostdesc:SetFont
line 243 in sb_main.lua This is what you put. You forgot a parenthesis [lua]v:SetPos( w - 85*k) - v:GetWide()/2 - 8, cy)[/lua] --> Correct format [lua]v:SetPos( w - (85*k) - v:GetWide()/2 - 8, cy)[/lua]
That worked thank you very much
[QUOTE=ideal-gaming;38896859]That worked thank you very much[/QUOTE] You are welcome :).
Just a tip, you could set the width of the label and use it as a max, then use label:Dock(RIGHT) so you can save some calculations.
[QUOTE=kaos2100;38894239]line 243 in sb_main.lua This is what you put. You forgot a parenthesis [lua]v:SetPos( w - 85*k) - v:GetWide()/2 - 8, cy)[/lua] --> Correct format [lua]v:SetPos( w - (85*k) - v:GetWide()/2 - 8, cy)[/lua][/QUOTE] Getting these errors [QUOTE] [ERROR] gamemodes/terrortown/gamemode/cl_scoreboard.lua:39: attempt to index global 'sboard_panel' (a nil value) 1. unknown - gamemodes/terrortown/gamemode/cl_scoreboard.lua:39 [/QUOTE] sb_main [QUOTE]---- VGUI panel version of the scoreboard, based on TEAM GARRY's sandbox mode ---- scoreboard. local surface = surface local draw = draw local math = math local string = string local vgui = vgui local GetTranslation = LANG.GetTranslation local GetPTranslation = LANG.GetParamTranslation include("sb_team.lua") include("sb_team.lua") surface.CreateFont("cool_small", {font = "coolvetica", size = 20, weight = 400}) surface.CreateFont("cool_large", {font = "coolvetica", size = 24, weight = 400}) surface.CreateFont("treb_small", {font = "Trebuchet18", size = 14, weight = 700}) local logo = surface.GetTextureID("VGUI/ttt/score_logo") local PANEL = {} local max = math.max local floor = math.floor local function UntilMapChange() local rounds_left = max(0, GetGlobalInt("ttt_rounds_left", 6)) local time_left = floor(max(0, ((GetGlobalInt("ttt_time_limit_minutes") or 60) * 60) - CurTime())) local h = floor(time_left / 3600) time_left = time_left - floor(h * 3600) local m = floor(time_left / 60) time_left = time_left - floor(m * 60) local s = floor(time_left) return rounds_left, string.format("%02i:%02i:%02i", h, m, s) end GROUP_TERROR = 1 GROUP_NOTFOUND = 2 GROUP_FOUND = 3 GROUP_SPEC = 4 GROUP_COUNT = 4 function ScoreGroup(p) if not IsValid(p) then return -1 end -- will not match any group panel if DetectiveMode() then if p:IsSpec() and (not p:Alive()) then if p:GetNWBool("body_found", false) then return GROUP_FOUND else local client = LocalPlayer() -- To terrorists, missing players show as alive if client:IsSpec() or client:IsActiveTraitor() or ((GAMEMODE.round_state != ROUND_ACTIVE) and client:IsTerror()) then return GROUP_NOTFOUND else return GROUP_TERROR end end end end return p:IsTerror() and GROUP_TERROR or GROUP_SPEC end function PANEL:Init() self.hostdesc = vgui.Create("DLabel", self) self.hostdesc:SetText(GetTranslation("sb_playing")) self.hostdesc:SetContentAlignment(9) self.hostname = vgui.Create( "DLabel", self ) self.hostname:SetText( GetHostName() ) self.hostname:SetContentAlignment(6) self.mapchange = vgui.Create("DLabel", self) self.mapchange:SetText("Map changes in 00 rounds or in 00:00:00") self.mapchange:SetContentAlignment(9) self.mapchange.Think = function (sf) local r, t = UntilMapChange() sf:SetText(GetPTranslation("sb_mapchange", {num = r, time = t})) sf:SizeToContents() end self.ply_frame = vgui.Create( "TTTPlayerFrame", self ) self.ply_groups = {} local t = vgui.Create("TTTScoreGroup", self.ply_frame:GetCanvas()) t:SetGroupInfo(GetTranslation("terrorists"), Color(0,200,0,100), GROUP_TERROR) self.ply_groups[GROUP_TERROR] = t t = vgui.Create("TTTScoreGroup", self.ply_frame:GetCanvas()) t:SetGroupInfo(GetTranslation("spectators"), Color(200, 200, 0, 100), GROUP_SPEC) self.ply_groups[GROUP_SPEC] = t if DetectiveMode() then t = vgui.Create("TTTScoreGroup", self.ply_frame:GetCanvas()) t:SetGroupInfo(GetTranslation("sb_mia"), Color(130, 190, 130, 100), GROUP_NOTFOUND) self.ply_groups[GROUP_NOTFOUND] = t t = vgui.Create("TTTScoreGroup", self.ply_frame:GetCanvas()) t:SetGroupInfo(GetTranslation("sb_confirmed"), Color(130, 170, 10, 100), GROUP_FOUND) self.ply_groups[GROUP_FOUND] = t end -- the various score column headers self.cols = {} self.cols[1] = vgui.Create( "DLabel", self ) self.cols[1]:SetText( GetTranslation("sb_ping") ) self.cols[2] = vgui.Create( "DLabel", self ) self.cols[2]:SetText( GetTranslation("sb_deaths") ) self.cols[3] = vgui.Create( "DLabel", self ) self.cols[3]:SetText( GetTranslation("sb_score") ) self.cols[5] = vgui.Create( "DLabel", self ) self.cols[5]:SetText("Rank") if KARMA.IsEnabled() then self.cols[4] = vgui.Create("DLabel", self) self.cols[4]:SetText(GetTranslation("sb_karma")) end self:UpdateScoreboard() self:StartUpdateTimer() end function PANEL:StartUpdateTimer() if not timer.Exists("TTTScoreboardUpdater") then timer.Create( "TTTScoreboardUpdater", 0.3, 0, function() local pnl = GAMEMODE:GetScoreboardPanel() if IsValid(pnl) then pnl:UpdateScoreboard() end end) end end local colors = { bg = Color(30,30,30, 235), bar = Color(220,180,0,255) }; local y_logo_off = 72 function PANEL:Paint() -- Logo sticks out, so always offset bg draw.RoundedBox( 8, 0, y_logo_off, self:GetWide(), self:GetTall() - y_logo_off, colors.bg) -- Server name is outlined by orange/gold area draw.RoundedBox( 8, 0, y_logo_off + 25, self:GetWide(), 32, colors.bar) -- TTT Logo surface.SetTexture( logo ) surface.SetDrawColor( 255, 255, 255, 255 ) surface.DrawTexturedRect( 5, 0, 256, 256 ) end function PANEL:PerformLayout() -- position groups and find their total size local gy = 0 -- can't just use pairs (undefined ordering) or ipairs (group 2 and 3 might not exist) for i=1, GROUP_COUNT do local group = self.ply_groups[i] if ValidPanel(group) then if group:HasRows() then group:SetVisible(true) group:SetPos(0, gy) group:SetSize(self.ply_frame:GetWide(), group:GetTall()) group:InvalidateLayout() gy = gy + group:GetTall() + 5 else group:SetVisible(false) end end end self.ply_frame:GetCanvas():SetSize(self.ply_frame:GetCanvas():GetWide(), gy) local h = y_logo_off + 110 + self.ply_frame:GetCanvas():GetTall() -- if we will have to clamp our height, enable the mouse so player can scroll local scrolling = h > ScrH() * 0.95 -- gui.EnableScreenClicker(scrolling) self.ply_frame:SetScroll(scrolling) h = math.Clamp(h, 110 + y_logo_off, ScrH() * 0.95) local w = math.max(ScrW() * 0.6, 640) self:SetSize(w, h) self:SetPos( (ScrW() - w) / 2, math.min(72, (ScrH() - h) / 4)) self.ply_frame:SetPos(8, y_logo_off + 109) self.ply_frame:SetSize(self:GetWide() - 16, self:GetTall() - 109 - y_logo_off - 5) -- server stuff self.hostdesc:SizeToContents() self.hostdesc:SetPos(w - self.hostdesc:GetWide() - 8, y_logo_off + 5) local hw = w - 180 - 8 self.hostname:SetSize(hw, 32) self.hostname:SetPos(w - self.hostname:GetWide() - 8, y_logo_off + 27) surface.SetFont("cool_large") local hname = self.hostname:GetValue() local tw, _ = surface.GetTextSize(hname) while tw > hw do hname = string.sub(hname, 1, -6) .. "..." tw, th = surface.GetTextSize(hname) end self.hostname:SetText(hname) self.mapchange:SizeToContents() self.mapchange:SetPos(w - self.mapchange:GetWide() - 8, y_logo_off + 60) -- score columns local cy = y_logo_off + 90 for k,v in
Im getting this error now [ERROR] gamemodes/terrortown/gamemode/vgui/sb_main.lua:244: unexpected symbol near '-' 1. unknown - gamemodes/terrortown/gamemode/vgui/sb_main.lua:0 sb_main [lua] ---- VGUI panel version of the scoreboard, based on TEAM GARRY's sandbox mode ---- scoreboard. local surface = surface local draw = draw local math = math local string = string local vgui = vgui local GetTranslation = LANG.GetTranslation local GetPTranslation = LANG.GetParamTranslation include("sb_team.lua") surface.CreateFont("cool_small", {font = "coolvetica", size = 20, weight = 400}) surface.CreateFont("cool_large", {font = "coolvetica", size = 24, weight = 400}) surface.CreateFont("treb_small", {font = "Trebuchet18", size = 14, weight = 700}) local logo = surface.GetTextureID("VGUI/ttt/score_logo") local PANEL = {} local max = math.max local floor = math.floor local function UntilMapChange() local rounds_left = max(0, GetGlobalInt("ttt_rounds_left", 6)) local time_left = floor(max(0, ((GetGlobalInt("ttt_time_limit_minutes") or 60) * 60) - CurTime())) local h = floor(time_left / 3600) time_left = time_left - floor(h * 3600) local m = floor(time_left / 60) time_left = time_left - floor(m * 60) local s = floor(time_left) return rounds_left, string.format("%02i:%02i:%02i", h, m, s) end GROUP_TERROR = 1 GROUP_NOTFOUND = 2 GROUP_FOUND = 3 GROUP_SPEC = 4 GROUP_COUNT = 4 function ScoreGroup(p) if not IsValid(p) then return -1 end -- will not match any group panel if DetectiveMode() then if p:IsSpec() and (not p:Alive()) then if p:GetNWBool("body_found", false) then return GROUP_FOUND else local client = LocalPlayer() -- To terrorists, missing players show as alive if client:IsSpec() or client:IsActiveTraitor() or ((GAMEMODE.round_state != ROUND_ACTIVE) and client:IsTerror()) then return GROUP_NOTFOUND else return GROUP_TERROR end end end end return p:IsTerror() and GROUP_TERROR or GROUP_SPEC end function PANEL:Init() self.hostdesc = vgui.Create("DLabel", self) self.hostdesc:SetText(GetTranslation("sb_playing")) self.hostdesc:SetContentAlignment(9) self.hostname = vgui.Create( "DLabel", self ) self.hostname:SetText( GetHostName() ) self.hostname:SetContentAlignment(6) self.mapchange = vgui.Create("DLabel", self) self.mapchange:SetText("Map changes in 00 rounds or in 00:00:00") self.mapchange:SetContentAlignment(9) self.mapchange.Think = function (sf) local r, t = UntilMapChange() sf:SetText(GetPTranslation("sb_mapchange", {num = r, time = t})) sf:SizeToContents() end self.ply_frame = vgui.Create( "TTTPlayerFrame", self ) self.ply_groups = {} local t = vgui.Create("TTTScoreGroup", self.ply_frame:GetCanvas()) t:SetGroupInfo(GetTranslation("terrorists"), Color(0,200,0,100), GROUP_TERROR) self.ply_groups[GROUP_TERROR] = t t = vgui.Create("TTTScoreGroup", self.ply_frame:GetCanvas()) t:SetGroupInfo(GetTranslation("spectators"), Color(200, 200, 0, 100), GROUP_SPEC) self.ply_groups[GROUP_SPEC] = t if DetectiveMode() then t = vgui.Create("TTTScoreGroup", self.ply_frame:GetCanvas()) t:SetGroupInfo(GetTranslation("sb_mia"), Color(130, 190, 130, 100), GROUP_NOTFOUND) self.ply_groups[GROUP_NOTFOUND] = t t = vgui.Create("TTTScoreGroup", self.ply_frame:GetCanvas()) t:SetGroupInfo(GetTranslation("sb_confirmed"), Color(130, 170, 10, 100), GROUP_FOUND) self.ply_groups[GROUP_FOUND] = t end -- the various score column headers self.cols = {} self.cols[1] = vgui.Create( "DLabel", self ) self.cols[1]:SetText( GetTranslation("sb_ping") ) self.cols[2] = vgui.Create( "DLabel", self ) self.cols[2]:SetText( GetTranslation("sb_deaths") ) self.cols[3] = vgui.Create( "DLabel", self ) self.cols[3]:SetText( GetTranslation("sb_score") ) self.cols[5] = vgui.Create( "DLabel", self ) self.cols[5]:SetText("Rank") if KARMA.IsEnabled() then self.cols[4] = vgui.Create("DLabel", self) self.cols[4]:SetText(GetTranslation("sb_karma")) end self:UpdateScoreboard() self:StartUpdateTimer() end function PANEL:StartUpdateTimer() if not timer.Exists("TTTScoreboardUpdater") then timer.Create( "TTTScoreboardUpdater", 0.3, 0, function() local pnl = GAMEMODE:GetScoreboardPanel() if IsValid(pnl) then pnl:UpdateScoreboard() end end) end end local colors = { bg = Color(30,30,30, 235), bar = Color(220,180,0,255) }; local y_logo_off = 72 function PANEL:Paint() -- Logo sticks out, so always offset bg draw.RoundedBox( 8, 0, y_logo_off, self:GetWide(), self:GetTall() - y_logo_off, colors.bg) -- Server name is outlined by orange/gold area draw.RoundedBox( 8, 0, y_logo_off + 25, self:GetWide(), 32, colors.bar) -- TTT Logo surface.SetTexture( logo ) surface.SetDrawColor( 255, 255, 255, 255 ) surface.DrawTexturedRect( 5, 0, 256, 256 ) end function PANEL:PerformLayout() -- position groups and find their total size local gy = 0 -- can't just use pairs (undefined ordering) or ipairs (group 2 and 3 might not exist) for i=1, GROUP_COUNT do local group = self.ply_groups[i] if ValidPanel(group) then if group:HasRows() then group:SetVisible(true) group:SetPos(0, gy) group:SetSize(self.ply_frame:GetWide(), group:GetTall()) group:InvalidateLayout() gy = gy + group:GetTall() + 5 else group:SetVisible(false) end end end self.ply_frame:GetCanvas():SetSize(self.ply_frame:GetCanvas():GetWide(), gy) local h = y_logo_off + 110 + self.ply_frame:GetCanvas():GetTall() -- if we will have to clamp our height, enable the mouse so player can scroll local scrolling = h > ScrH() * 0.95 -- gui.EnableScreenClicker(scrolling) self.ply_frame:SetScroll(scrolling) h = math.Clamp(h, 110 + y_logo_off, ScrH() * 0.95) local w = math.max(ScrW() * 0.6, 640) self:SetSize(w, h) self:SetPos( (ScrW() - w) / 2, math.min(72, (ScrH() - h) / 4)) self.ply_frame:SetPos(8, y_logo_off + 109) self.ply_frame:SetSize(self:GetWide() - 16, self:GetTall() - 109 - y_logo_off - 5) -- server stuff self.hostdesc:SizeToContents() self.hostdesc:SetPos(w - self.hostdesc:GetWide() - 8, y_logo_off + 5) local hw = w - 180 - 8 self.hostname:SetSize(hw, 32) self.hostname:SetPos(w - self.hostname:GetWide() - 8, y_logo_off + 27) surface.SetFont("cool_large") local hname = self.hostname:GetValue() local tw, _ = surface.GetTextSize(hname) while tw > hw do hname = string.sub(hname, 1, -6) .. "..." tw, th = surface.GetTextSize(hname) end self.hostname:SetText(hname) self.mapchange:SizeToContents() self.mapchange:SetPos(w - self.mapchange:GetWide() - 8, y_logo_off + 60) -- score columns local cy = y_logo_off + 90 for k,v in ipairs(self.cols) do for k,v in ipairs(self.cols) do v:SizeToContents() v:SetPos( w - (50*k) - v:GetWide()/2 - 8, cy) if v == self.cols[5] then v:SetPos( w - 85*k) - v:GetWide()/2 - 8, cy) end end end function PANEL:ApplySchemeSettings() self.hostdesc:SetFont("cool_small") self.hostname:SetFont("cool_large") self.mapchange:Se
[lua]for k,v in ipairs(self.cols) do for k,v in ipairs(self.cols) do v:SizeToContents() v:SetPos( w - (50*k) - v:GetWide()/2 - 8, cy) if v == self.cols[5] then v:SetPos( w - 85*k) - v:GetWide()/2 - 8, cy) end end end[/lua] sb_main.lua Lines 238-246... Do you not see the problem? I have nothing more to say.
[QUOTE=kaos2100;38928157][lua]for k,v in ipairs(self.cols) do for k,v in ipairs(self.cols) do v:SizeToContents() v:SetPos( w - (50*k) - v:GetWide()/2 - 8, cy) if v == self.cols[5] then v:SetPos( w - 85*k) - v:GetWide()/2 - 8, cy) end end end[/lua] sb_main.lua Lines 238-246... Do you not see the problem? I have nothing more to say.[/QUOTE] [HTML]-- score columns local cy = y_logo_off + 90 for k,v in ipairs(self.cols) do v:SizeToContents() v:SetPos( w - (50*k) - v:GetWide()/2 - 8, cy) if v == self.cols[5] then v:SetPos( w - (85*k) - v:GetWide()/2 - 8, cy) end end[/HTML] Getting this error [QUOTE][ERROR] gamemodes/terrortown/gamemode/cl_scoreboard.lua:39: attempt to index global 'sboard_panel' (a nil value) 1. unknown - gamemodes/terrortown/gamemode/cl_scoreboard.lua:39 [/QUOTE]
Sorry, you need to Log In to post a reply to this thread.