So I'm completely stomped here. I realized that I'm doing this completely wrong but I have no idea how to fix it. Basically, what I want to happen:
( To lessen confusion, Player X is a VIP Client. )
1) Player X sets a certain Color he wants his name on the scoreboard to be...
2) His name shows up as that color for everyone
What really happens:
1) Player X sets a certain Color he wants his name on the scoreboard to be...
2) For every other VIP Client that has this feature enabled, that his name is the color of what Player X set for HIS name to be...
I have no idea how to fix this, can anyone help? Here's the full code:
[lua]
---- 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"))
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 glow = math.abs(math.sin(CurTime() * 2) * 255); -- Math stuff for flashing.
local flashingRed = Color(glow, 0, 0, 255); -- This flashes red.
local flashingGreen = Color(0, glow, 0); -- This flashes green.
local flashingBlue = Color(0, 0, glow); -- This flashes blue.
local namecolor = {
default = COLOR_WHITE,
admin = Color(220, 180, 0, 255),
dev = flashingRed,
red = Color( 255, 0, 0, 255 ),
blue = Color( 0, 0, 255, 255 ),
green = Color( 0, 255, 0, 255 ),
purple = Color( 148, 0, 211, 255 )
};
function GM:TTTScoreboardColorForPlayer(ply)
if not IsValid(ply) then return namecolor.default end
if ply:IsAdmin() and GetGlobalBool("ttt_highlight_admins", true) then
return namecolor.admin
elseif ( ply:EV_IsVip() or ply:EV_IsOwner() ) and ply:GetInfoNum( "ttt_scoreboard_color" ) == 1 then
return Color( ply:GetInfoNum( "ttt_scoreboard_colorr", 255 ), ply:GetInfoNum( "ttt_scoreboard_colorg", 255 ), ply:GetInfoNum( "ttt_scoreboard_colorb", 255 ), 255 )
end
return namecolor.default
end
local function ColorForPlayer(ply)
if IsValid(ply) then
local glow = math.abs(math.sin(CurTime() * 2) * 255); -- Math stuff for flashing.
local flashingRed = Color(glow, 0, 0, 255); -- This flashes red.
local flashingGreen = Color(0, glow, 0); -- This flashes green.
local flashingBlue = Color(0, 0, glow); -- This flashes blue.
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()
if ply:SteamID() == "STEAM_0:X:XXXXXXXX" and ply:Nick() == "XXXXX" then
self.nick:SetFGColor( math.abs(math.sin(CurTime() * 2) * 255), 0, math.abs(math.sin(CurTime() * 2) * 255), 255 )
elseif ply:SteamID() == "STEAM_0:X:XXXXXXXX" and ply:Nick() == "XXXXXX" then
self.nick:SetFGColor( math.abs(math.sin(CurTime() * 2) * 255), 0, math.abs(math.sin(CurTime() * 2) * 255), 255 )
else
self.nick:SetFGColor(ColorForPlayer(ply))
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: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
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
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:GetWi
A picture would help me :/
GetInfoNum is serverside. You'll need to network the values to all the other clients.
So you're saying every client needs the colors of every other client? I'll see if that works..
[QUOTE=InfernalCookie;36088948]So you're saying every client needs the colors of every other client? I'll see if that works..[/QUOTE]
How else would the client know what color the other players should be on the scoreboard....telepathy?
Well when I first looked at the GetInfoNum page, it said it was a shared thing. But I checked again and it was server only.
Sorry, you need to Log In to post a reply to this thread.