Hello, i got this Error when I open the scoreboard on my server.
[ERROR] gamemodes/terrortown/gamemode/vgui/sb_team.lua:76: attempt to index global 'sboard_panel' (a nil value)
1. unknown - gamemodes/terrortown/gamemode/vgui/sb_team.lua:76
Its spamming the console full.
sb_team.lua ->
---- Unlike sandbox, we have teams to deal with, so here's an extra panel in the
---- hierarchy that handles a set of player rows belonging to its team.
include("sb_row.lua")
local function CompareScore(pa, pb)
if not ValidPanel(pa) then return false end
if not ValidPanel(pb) then return true end
local a = pa:GetPlayer()
local b = pb:GetPlayer()
if not IsValid(a) then return false end
if not IsValid(b) then return true end
if a:Frags() == b:Frags() then return a:Deaths() < b:Deaths() end
return a:Frags() > b:Frags()
end
local PANEL = {}
function PANEL:Init()
self.name = "Unnamed"
self.color = COLOR_WHITE
self.rows = {}
self.rowcount = 0
self.rows_sorted = {}
self.group = "spec"
end
function PANEL:SetGroupInfo(name, color, group)
self.name = name
self.color = color
self.group = group
end
local bgcolor = Color(20,20,20, 150)
function PANEL:Paint()
-- Darkened background
draw.RoundedBox(8, 0, 0, self:GetWide(), self:GetTall(), bgcolor)
surface.SetFont("treb_small")
-- Header bg
local txt = self.name .. " (" .. self.rowcount .. ")"
local w, h = surface.GetTextSize(txt)
draw.RoundedBox(8, 0, 0, w + 24, 20, self.color)
-- Shadow
surface.SetTextPos(11, 11 - h/2)
surface.SetTextColor(0,0,0, 200)
surface.DrawText(txt)
-- Text
surface.SetTextPos(10, 10 - h/2)
surface.SetTextColor(255,255,255,255)
surface.DrawText(txt)
-- Alternating row background
local y = 24
for i, row in ipairs(self.rows_sorted) do
if (i % 2) != 0 then
surface.SetDrawColor(75,75,75, 100)
surface.DrawRect(0, y, self:GetWide(), row:GetTall())
end
y = y + row:GetTall() + 1
end
-- Column darkening
local scr = sboard_panel.ply_frame.scroll.Enabled and 16 or 0
surface.SetDrawColor(0,0,0,80)
if sboard_panel.cols then
-- Draw for odd numbered columns
for i=1, #sboard_panel.cols, 2 do
surface.DrawRect(self:GetWide() - (50*i) - 25 - scr, 0, 50, self:GetTall())
end
else
-- If columns are not setup yet, fall back to darkening the areas for the
-- default columns
surface.DrawRect(self:GetWide() - 175 - 25 - scr, 0, 50, self:GetTall())
surface.DrawRect(self:GetWide() - 75 - 25 - scr, 0, 50, self:GetTall())
end
end
function PANEL:AddPlayerRow(ply)
if ScoreGroup(ply) == self.group and not self.rows[ply] then
local row = vgui.Create("TTTScorePlayerRow", self)
row:SetPlayer(ply)
self.rows[ply] = row
self.rowcount = table.Count(self.rows)
-- row:InvalidateLayout()
-- must force layout immediately or it takes its sweet time to do so
self:PerformLayout()
ScoreboardCommands_Add( row )
--self:InvalidateLayout()
end
end
function PANEL:HasPlayerRow(ply)
return self.rows[ply] != nil
end
function PANEL:HasRows()
return self.rowcount > 0
end
function PANEL:UpdateSortCache()
self.rows_sorted = {}
for k,v in pairs(self.rows) do
table.insert(self.rows_sorted, v)
end
table.sort(self.rows_sorted, CompareScore)
end
function PANEL:UpdatePlayerData()
local to_remove = {}
for k,v in pairs(self.rows) do
-- Player still belongs in this group?
if ValidPanel(v) and IsValid(v:GetPlayer()) and ScoreGroup(v:GetPlayer()) == self.group then
v:UpdatePlayerData()
else
-- can't remove now, will break pairs
table.insert(to_remove, k)
end
end
if #to_remove == 0 then return end
for k,ply in pairs(to_remove) do
local pnl = self.rows[ply]
if ValidPanel(pnl) then
pnl:Remove()
end
-- print(CurTime(), "Removed player", ply)
self.rows[ply] = nil
end
self.rowcount = table.Count(self.rows)
self:UpdateSortCache()
self:InvalidateLayout()
end
function PANEL:PerformLayout()
if self.rowcount < 1 then
self:SetVisible(false)
return
end
self:SetSize(self:GetWide(), 30 + self.rowcount + self.rowcount * SB_ROW_HEIGHT)
-- Sort and layout player rows
self:UpdateSortCache()
local y = 24
for k, v in ipairs(self.rows_sorted) do
v:SetPos(0, y)
v:SetSize(self:GetWide(), v:GetTall())
y = y + v:GetTall() + 1
end
self:SetSize(self:GetWide(), 30 + (y - 24))
end
vgui.Register("TTTScoreGroup", PANEL, "Panel")
Make sure you don't alter the core files, if you make changes use an addon with the file you change in the addon folder in the same directory so the addon will overwrite the game-mode file....
Revert to default and update... Also, please use [code] tags int he future.
Sorry, you need to Log In to post a reply to this thread.