Hello everyone! I get the error
[I]ERROR: Hook 'Scorpy's Simple Chatbox - Open' Failed: [scorpy_chatbox\vgui\scorpy_chatbox_panels.lua:230] attempt to get length of field 'Tabs' (a nil value)
Removing Hook 'Scorpy's Simple Chatbox - Open'[/I]
when trying to open up chat.
Here's the code:
[lua]
local MESSAGE_PANEL = {}
function MESSAGE_PANEL:Init()
self.NrLines = 0
self:SetMouseInputEnabled(false)
self:SetKeyboardInputEnabled(false)
self:SetPaintBackgroundEnabled( false )
self:SetPaintBorderEnabled( false )
self.TextPanel = vgui.Create("RichLabel", self)
self.TextPanel:SetFont("ChatFont")
self.TextPanel:SetDefaultColor(Color(220,220,220))
self.Icon = vgui.Create("DImage", self)
self.Icon:SetSize(16, 16)
end
function MESSAGE_PANEL:PerformLayout()
self.Icon:SetPos(30 - self.Icon:GetWide(), 0)
self.TextPanel:SetWidth(self:GetWide() - 30 - 10)
self.TextPanel:SetPos(30 + 5, 0)
self.TextPanel:InvalidateLayout(true)
self.NrLines = #self.TextPanel.Lines
self:SetTall( math.Max( self.Icon:GetTall(), self.TextPanel:GetTall() ) )
self.TextPanel:CenterVertical()
end
function MESSAGE_PANEL:Show()
self.Hidden = false
self:SetVisible(true)
end
function MESSAGE_PANEL:Hide()
self.Hidden = true
timer.Simple(0.30, function()
if self.Hidden then
self:SetVisible(false)
end
end)
end
function MESSAGE_PANEL:MoveToS(x, y)
if self.TargetX != x or self.TargetY != y then
self:MoveTo(x, y, 0.25 )
end
self.TargetX, self.TargetY = x, y
end
function MESSAGE_PANEL:SetMessage(contents, icon)
for _,item in ipairs(contents) do
if type(item) == "string" then
self.TextPanel:AddText(item)
elseif type(item) == "table" then
self.TextPanel:AddColor(item)
elseif type(item) == "Player" then
self.TextPanel:AddPlayer(item)
icon = icon or item
end
end
if not icon then
local match
for _, ply in pairs( player.GetAll() ) do
local name = ply:Name()
if string.find(self.TextPanel.Text, name..": ", 1, true) then
if not match or match:len() < name:len() then
match = name
icon = ply
end
end
end
if not match then
if string.find(self.TextPanel.Text, "Console: ", 1, true) then
icon = "gui/silkicons/application_xp_terminal"
end
end
end
if type(icon) == "Player" then
self.Icon.Avatar = vgui.Create("AvatarImage", self.Icon)
self.Icon.Avatar:SetPlayer(icon)
self.Icon.Avatar:SetSize(16,16)
icon = "gui/silkicons/user"
end
icon = icon or "gui/silkicons/information"
self.Icon:SetImage(icon)
end
local MessagePanel = vgui.RegisterTable(MESSAGE_PANEL, "Panel")
local TEXT_ENTRY_PANEL = {}
function TEXT_ENTRY_PANEL:Init()
self:SetAllowNonAsciiCharacters(true)
self.m_bLoseFocusOnClickAway = false
end
function TEXT_ENTRY_PANEL:Paint() derma.SkinHook( "Paint", "TextEntry", self ) end
function TEXT_ENTRY_PANEL:OnTextChanged()
gamemode.Call( "ChatTextChanged", self:GetValue() )
end
function TEXT_ENTRY_PANEL:AllowInput()
if string.len(self:GetValue()) >= 126 then
surface.PlaySound("Resource/warning.wav")
return true
end
end
function TEXT_ENTRY_PANEL:OnKeyCodeTyped( code )
local chatbox = self:GetParent()
local text = self:GetValue()
if code == KEY_ENTER then
if string.Trim(text) != "" then
local match = string.match(text, "^!%s*(.+)$")
if match then
match = CG.SplitArgs( match )
if CG.GetCommand(match[1]) then
RunConsoleCommand( "CG", unpack(match) )
end
end
if chatbox.TeamChat then
RunConsoleCommand("say_team", text)
else
RunConsoleCommand("say", text)
end
end
chatbox:Close()
elseif code == KEY_ESCAPE then
chatbox:Close()
timer.Simple(0, RunConsoleCommand, "cancelselect")
end
end
local ChatboxTextEntry = vgui.RegisterTable(TEXT_ENTRY_PANEL, "DTextEntry")
local CHATBOX_PANEL = {}
function CHATBOX_PANEL:Init()
self.IsOpen = false
self.TeamChat = false
self.FirstOpen = true
self.Messages = {}
self.Lines = {}
self.RecentMessages = {}
self.ButtonsList = {}
self.ShowLines = 10
self:SetPaintBackgroundEnabled( false )
self:SetPaintBorderEnabled( false )
self:DockPadding(8, 8, 8, 8)
self:SetSize(500, 32)
self.x = -self:GetWide()
self.ChatTypeLabel = vgui.Create("DLabel", self)
self.ChatTypeLabel:SetTextColor(Color(255, 255, 255, 255))
self.ChatTypeLabel:SetFont("DefaultBold")
self.ChatTypeLabel:Dock(LEFT)
self.ChatTypeLabel:DockMargin(0, 0, 4, 0)
self.TextEntry = vgui.CreateFromTable(ChatboxTextEntry, self)
self.TextEntry:Dock(FILL)
self.ScrollBar = vgui.Create( "DVScrollBar" )
function self.ScrollBar.GetParent() return self end
self.CGDropdown = vgui.Create("Panel")
self.CGDropdown:SetVisible(false)
self.CGDropdown:DockPadding(8, 4, 8, 4)
function self.CGDropdown:Paint() derma.SkinHook( "Paint", "CGDropdown", self ) end
self.CG_URL = vgui.Create("DLabel", self.CGDropdown)
self.CG_URL:SetTextColor(Color(255, 255, 255, 255))
self.CG_URL:SetFont("UiBold")
self.CG_URL:SetText("LKSGaming")
self.CG_URL:SizeToContentsX()
self.CG_URL:Dock(LEFT)
end
function CHATBOX_PANEL:Paint() derma.SkinHook( "Paint", "InputPanel", self ) end
function CHATBOX_PANEL:PerformLayout()
self.y = ScrH() - 140 - self:GetTall() - self.CGDropdown:GetTall()
self.ScrollBar:SetSize(16, self.ShowLines*draw.GetFontHeight("ChatFont"))
self.ScrollBar:SetPos( self:GetWide() - 16, self.y - 16 - self.ScrollBar:GetTall() )
self.ScrollBar:SetUp( self.ShowLines, #self.Lines )
self.CGDropdown:SetSize(self:GetWide() - 40, 24)
self.CGDropdown:SetPos(20, self.IsOpen and self.y + self:GetTall() or self.y)
end
function CHATBOX_PANEL:OnVScroll()
self:SetRecentMessages()
end
function CHATBOX_PANEL:OnScrollbarAppear()
if not self.IsOpen then
self.ScrollBar:SetAlpha(0)
end
end
function CHATBOX_PANEL:Open(team_chat)
if self.IsOpen then return end
self.IsOpen = true
gamemode.Call("StartChat")
self.TeamChat = team_chat
self.ChatTypeLabel:SetText(team_chat and "Say (Team):" or "Say:")
self.ChatTypeLabel:SizeToContentsX()
self:InvalidateLayout(true)
self:SetMouseInputEnabled(true)
self:SetKeyboardInputEnabled(true)
self:MakePopup()
self.TextEntry:RequestFocus()
if self.FirstOpen then
self:SetSkin("ScorpyChatbox")
self.CGDropdown:SetSkin("ScorpyChatbox")
self.ScrollBar:SetSkin("ScorpyChatbox")
for i = #CG.Tabs, 1, -1 do
self:AddCGButton(CG.Tabs[i].Name, CG.Tabs[i].Icon, CG.Tabs[i].Description, CG.Tabs[i].Flag)
end
self.FirstOpen = false
end
for _,btn in pairs(self.ButtonsList) do
btn:SetVisible(CG.PlayerHasFlag(LocalPlayer(), btn.Flag))
end
self.CGDropdown:InvalidateLayout(true)
self:SetRecentMessages()
self:MoveTo( 0, self.y, 0.25, 0, 1)
timer.Simple(0.30, function()
if self.IsOpen then
self.CGDropdown:SetVisible(true)
self.CGDropdown:MoveTo( self.CGDropdown.x, self.y + self:GetTall(), 0.25)
self.ScrollBar:AlphaTo(255, 0.25)
end
end)
end
function CHATBOX_PANEL:Close()
if not self.IsOpen then return end
self.IsOpen = false
gamemode.Call("FinishChat")
self:SetMouseInputEnabled(false)
self:SetKeyboardInputEnabled(false)
self.TextEntry:SetText("")
gamemode.Call( "ChatTextChanged", "" )
self.ScrollBar:SetScroll(self.ScrollBar.CanvasSize)
self:SetRecentMessages()
self.ScrollBar:AlphaTo(0, 0.25)
You are missing the CG.Tabs table.
Ahh, thank you very much.
Was really annoying getting that error several times.
Sorry, you need to Log In to post a reply to this thread.