General > Developers Corner

ULX scoreboard and text color help TTT server

<< < (6/7) > >>

Decicus:
Basically what JamminR said. It just ends up making sense somehow, and I don't want to mess with logic.

DJ Mikey:
darn didnt see you replied, can you look at my previous post i just edited.  Thanks!  All this lua stuff is making my brain ache, just last week i knew nothing.

Decicus:
If I understood it right, all the extra Steam ID's are just VIPs, and those Steam ID's/players are in their own ULX group called "vip".

Then yes, in theory that should work completely fine as long as they're inside that ULX group.

DJ Mikey:
fantastic, it just made more sense.

DJ Mikey:
I am getting these following errors every time i press TAB.  It results in a crash from the server with the text "too many lua errors"

[ERROR] gamemodes/terrortown/gamemode/vgui/sb_row.lua:207: attempt to index global 'Self' (a nil value)
  1. UpdatePlayerData - gamemodes/terrortown/gamemode/vgui/sb_row.lua:207
   2. SetPlayer - gamemodes/terrortown/gamemode/vgui/sb_row.lua:174
    3. AddPlayerRow - gamemodes/terrortown/gamemode/vgui/sb_team.lua:85
     4. UpdateScoreboard - gamemodes/terrortown/gamemode/vgui/sb_main.lua:273
      5. unknown - gamemodes/terrortown/gamemode/cl_scoreboard.lua:40


[ERROR] gamemodes/terrortown/gamemode/vgui/sb_row.lua:207: attempt to index global 'Self' (a nil value)
  1. UpdatePlayerData - gamemodes/terrortown/gamemode/vgui/sb_row.lua:207
   2. SetPlayer - gamemodes/terrortown/gamemode/vgui/sb_row.lua:174
    3. AddPlayerRow - gamemodes/terrortown/gamemode/vgui/sb_team.lua:85
     4. UpdateScoreboard - gamemodes/terrortown/gamemode/vgui/sb_main.lua:273
      5. unknown - gamemodes/terrortown/gamemode/vgui/sb_main.lua:153

The only script i edited was sb_row.lua
Here is what i currently have that is causing the errors


--- 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"))
       
      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
     
       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
     
    ----EDIT THESE TO ADD MORE COLOURS----
    ----Example: test = COLOR_BLUE----
    ---Make sure to put a comma after each line until the end (Last one doesn't have one---
     
    local namecolor = {
       default = COLOR_WHITE,
       admin = Color(220, 180, 0, 255),
       dev = Color(0, 100, 255, 255),
       test = Color(220, 0, 0, 255),
       member = Color(50, 255, 0, 255)
    };
     
    function GM:TTTScoreboardColorForPlayer(ply)
       if not IsValid(ply) then return namecolor.default end
     
       --ADD NAMECOLOURS HERE--
       if ply:SteamID() == "STEAM_0:0:xxxxxxxxx" then
          return namecolor.dev
       elseif ply:SteamID() == "STEAM_0:0:xxxxxxxxxx" then
          return namecolor.dev
       elseif ply:SteamID() == "STEAM_0:1:xxxxxxxxxx" then
          return namecolor.dev
       elseif ply:SteamID() == "STEAM_0:1:xxxxxxxxxx" then
          return namecolor.dev
       elseif ply:SteamID() == "STEAM_0:1:xxxxxxxxx" then
          return namecolor.dev
       elseif ply:SteamID() == "STEAM_0:1:xxxxxxxxxx" then
          return namecolor.dev
       elseif ply:SteamID() == "STEAM_0:1:xxxxxxxxxxx" then
          return namecolor.dev
       elseif ply:IsAdmin() and GetGlobalBool("ttt_highlight_admins", true) then
          return namecolor.admin
       elseif ply:IsUserGroup("superadmin") then
                    return namecolor.test
       elseif ply:IsUserGroup("member") then
                    return namecolor.member
       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))
       
       
            if ply:IsUserGroup("superadmin") then
                    self.cols[5]:SetText("Owner")
                    self.cols[5]:SetTextColor(namecolor.test)
            elseif ply:IsUserGroup("admin") then
                    self.cols[5]:SetText("Admin")
                    self.cols[5]:SetTextColor(Color(220, 180, 0, 255))
            elseif ply:IsUserGroup("vip") then
                    self.cols[5]:SetText("VIP")
                    self.cols[5]:SetTextColor(Color(0, 100, 255, 255))
            elseif ply:IsUserGroup("user") then
                    self.cols[5]:SetText("Guest")
                    Self.cols[5]:SetTextColor(Color(255, 255, 255, 255))
            elseif ply:IsUserGroup("member") then
                    self.cols[5]:SetText("Member")
                    self.cols[5]:SetTextColor(Color(50, 255, 0, 255))
    --  Delete the -- and change the settings to your liking. DO NOT DELETE THE 'end'
            end
     
       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" )
--- End code ---


Steam ids were xxx'd out for privacy reasons.

What in this code is causing those errors? 

Think i found it
elseif ply:IsUserGroup("user") then
                    self.cols[5]:SetText("Guest")
                    Self.cols[5]:SetTextColor(Color(255, 255, 255, 255))

capital S in self.cols.................
testing now.

Yes, nvm.. it was the capital S.  How dumb lol

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version