• TTT Scoreboard lua error
    11 replies, posted
Hey, I have been coding in my TTT servers Scoreboard, yet its not working because I keep getting this error: [CODE][ERROR] gamemodes/terrortown/gamemode/cl_hud.lua:260: attempt to index local 'L' (a nil value) 1. InfoPaint - gamemodes/terrortown/gamemode/cl_hud.lua:260 2. unknown - gamemodes/terrortown/gamemode/cl_hud.lua:342 [ERROR] gamemodes/terrortown/gamemode/cl_hud.lua:260: attempt to index local 'L' (a nil value) 1. InfoPaint - gamemodes/terrortown/gamemode/cl_hud.lua:260 2. unknown - gamemodes/terrortown/gamemode/cl_hud.lua:342 [ERROR] gamemodes/terrortown/gamemode/cl_hud.lua:260: attempt to index local 'L' (a nil value) 1. InfoPaint - gamemodes/terrortown/gamemode/cl_hud.lua:260 2. unknown - gamemodes/terrortown/gamemode/cl_hud.lua:342 [ERROR] gamemodes/terrortown/gamemode/cl_hud.lua:260: attempt to index local 'L' (a nil value) 1. InfoPaint - gamemodes/terrortown/gamemode/cl_hud.lua:260 2. unknown - gamemodes/terrortown/gamemode/cl_hud.lua:342 [ERROR] gamemodes/terrortown/gamemode/cl_hud.lua:260: attempt to index local 'L' (a nil value) 1. InfoPaint - gamemodes/terrortown/gamemode/cl_hud.lua:260 2. unknown - gamemodes/terrortown/gamemode/cl_hud.lua:342 [/CODE] sb_main [CODE] ---- 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
When you make changes to client side code it does this. Either restart the map or make it only define the variables values if the object hasn't already been defined.
Yeah, TTT wasn't made to be "lua refreshed". This is a simple workaround you can use to edit the HUD in real time. 1. Open terrortown/gamemode/lang_shd.lua 2. Add this after line 5: [QUOTE]if LANG then return end[/QUOTE] 3. The top of that file should look like this: [QUOTE]if LANG then return end LANG = {}[/QUOTE]
kaykay. Testing this now....... [editline]7th May 2013[/editline] Errors: [ERROR] gamemodes/terrortown/gamemode/vgui/sb_row.lua:183: attempt to call method 'SetText' (a nil value) 1. UpdatePlayerData - gamemodes/terrortown/gamemode/vgui/sb_row.lua:183 2. SetPlayer - gamemodes/terrortown/gamemode/vgui/sb_row.lua:165 3. AddPlayerRow - gamemodes/terrortown/gamemode/vgui/sb_team.lua:85 4. UpdateScoreboard - gamemodes/terrortown/gamemode/vgui/sb_main.lua:271 5. Init - gamemodes/terrortown/gamemode/vgui/sb_main.lua:141 6. Create - lua/includes/extensions/client/panel/scriptedpanels.lua:153 7. ScoreboardCreate - gamemodes/terrortown/gamemode/cl_scoreboard.lua:27 8. unknown - gamemodes/terrortown/gamemode/cl_scoreboard.lua:34 [ERROR] gamemodes/terrortown/gamemode/vgui/sb_row.lua:183: attempt to call method 'SetText' (a nil value) 1. UpdatePlayerData - gamemodes/terrortown/gamemode/vgui/sb_row.lua:183 2. SetPlayer - gamemodes/terrortown/gamemode/vgui/sb_row.lua:165 3. AddPlayerRow - gamemodes/terrortown/gamemode/vgui/sb_team.lua:85 4. UpdateScoreboard - gamemodes/terrortown/gamemode/vgui/sb_main.lua:271 5. Init - gamemodes/terrortown/gamemode/vgui/sb_main.lua:141 6. Create - lua/includes/extensions/client/panel/scriptedpanels.lua:153 7. ScoreboardCreate - gamemodes/terrortown/gamemode/cl_scoreboard.lua:27 8. unknown - gamemodes/terrortown/gamemode/cl_scoreboard.lua:34 [ERROR] gamemodes/terrortown/gamemode/vgui/sb_row.lua:183: attempt to call method 'SetText' (a nil value) 1. UpdatePlayerData - gamemodes/terrortown/gamemode/vgui/sb_row.lua:183 2. SetPlayer - gamemodes/terrortown/gamemode/vgui/sb_row.lua:165 3. AddPlayerRow - gamemodes/terrortown/gamemode/vgui/sb_team.lua:85 4. UpdateScoreboard - gamemodes/terrortown/gamemode/vgui/sb_main.lua:271 5. Init - gamemodes/terrortown/gamemode/vgui/sb_main.lua:141 6. Create - lua/includes/extensions/client/panel/scriptedpanels.lua:153 7. ScoreboardCreate - gamemodes/terrortown/gamemode/cl_scoreboard.lua:27 8. unknown - gamemodes/terrortown/gamemode/cl_scoreboard.lua:34
That is very messy code in your first post I can't really help you without it being cleaned up
Thank you for the improved code layout I will fix it for you
[QUOTE=brandonj4;40556204]Yeah, TTT wasn't made to be "lua refreshed". This is a simple workaround you can use to edit the HUD in real time. 1. Open terrortown/gamemode/lang_shd.lua 2. Add this after line 5: 3. The top of that file should look like this:[/QUOTE]First of all, how is that going to help with the errors with the code? Secondly, by returning LANG as false, what is that supposed to do regarding the HUD editing?
[code] if ply:IsUserGroup("user") then self.cols[5]:SetText("User") self.cols[5]:SetTextColor(namecolor.default) elseif ply:IsUserGroup("owner") then self.cols[5]:SetText("Owner") self.cols[5]:SetTextColor(namecolor.owner) elseif ply:IsUserGroup("admin") then self.cols[5]:SetText("Admin") self.cols[5]:SetTextColor(namecolor.admin) elseif ply:IsUserGroup("moderator") then self.cols[5]:SetText("Moderator") self.cols[5]:SetTextColor(namecolor.moderator) elseif ply:IsUserGroup("respected") then self.cols[5]:SetText("Respected") self.cols[5]:SetTextColor(namecolor.respected) elseif ply:IsUserGroup("donator") then self.cols[5]:SetText("Donator") self.cols[5]:SetTextColor(namecolor.donator) elseif ply:IsUserGroup("headadmin") then self.cols[5]:SetText("Head-Admin") self.cols[5]:SetTextColor(namecolor.headadmin) elseif ply:IsUserGroup("superadmin") then self.cols[5]:SetText("Super-Admin") self.cols[5]:SetTextColor(namecolor.superadmin) end [/code] Instead of [code] ="keyword operator">="keyword">if ply:IsUserGroup("user") then self.cols[="constant numeric">5]:SetText("User") self.cols[5]:SetTextColor(namecolor.default) elseif ply:IsUserGroup("owner") ="keyword">then self.cols[5]:SetText("Owner") self.cols[5]:SetTextColor(namecolor.owner) elseif ply:IsUserGroup("admin") then self.cols[5]:SetText("Admin") self.cols[5]:SetTextColor(namecolor.admin) elseif ply:IsUserGroup("moderator") then self.cols[5]:SetText("Moderator") self.cols[5]:SetTextColor(namecolor.moderator) elseif ply:IsUserGroup("respected") then self.cols[5]:SetText("Respected") self.cols[5]:SetTextColor(namecolor.respected) elseif ply:IsUserGroup("donator") ="keyword">then self.cols[5]:SetText("Donator") self.cols[5]:SetTextColor(namecolor.donator) ="keyword">elseif ply:IsUserGroup("headadmin") then self.cols[5]:SetText("Head-Admin") self.cols[5]:SetTextColor(namecolor.headadmin) elseif ply:IsUserGroup("superadmin") then self.cols[5]:SetText("Super-Admin") self.cols[5]:SetTextColor(namecolor.superadmin) ="keyword">end [/code] I think that if this doesn't work it might be that the newer ttt version use's different code to what I made
[QUOTE=ZombieWizzard;40569521][code] if ply:IsUserGroup("user") then self.cols[5]:SetText("User") self.cols[5]:SetTextColor(namecolor.default) elseif ply:IsUserGroup("owner") then self.cols[5]:SetText("Owner") self.cols[5]:SetTextColor(namecolor.owner) elseif ply:IsUserGroup("admin") then self.cols[5]:SetText("Admin") self.cols[5]:SetTextColor(namecolor.admin) elseif ply:IsUserGroup("moderator") then self.cols[5]:SetText("Moderator") self.cols[5]:SetTextColor(namecolor.moderator) elseif ply:IsUserGroup("respected") then self.cols[5]:SetText("Respected") self.cols[5]:SetTextColor(namecolor.respected) elseif ply:IsUserGroup("donator") then self.cols[5]:SetText("Donator") self.cols[5]:SetTextColor(namecolor.donator) elseif ply:IsUserGroup("headadmin") then self.cols[5]:SetText("Head-Admin") self.cols[5]:SetTextColor(namecolor.headadmin) elseif ply:IsUserGroup("superadmin") then self.cols[5]:SetText("Super-Admin") self.cols[5]:SetTextColor(namecolor.superadmin) end [/code] Instead of [code] ="keyword operator">="keyword">if ply:IsUserGroup("user") then self.cols[="constant numeric">5]:SetText("User") self.cols[5]:SetTextColor(namecolor.default) elseif ply:IsUserGroup("owner") ="keyword">then self.cols[5]:SetText("Owner") self.cols[5]:SetTextColor(namecolor.owner) elseif ply:IsUserGroup("admin") then self.cols[5]:SetText("Admin") self.cols[5]:SetTextColor(namecolor.admin) elseif ply:IsUserGroup("moderator") then self.cols[5]:SetText("Moderator") self.cols[5]:SetTextColor(namecolor.moderator) elseif ply:IsUserGroup("respected") then self.cols[5]:SetText("Respected") self.cols[5]:SetTextColor(namecolor.respected) elseif ply:IsUserGroup("donator") ="keyword">then self.cols[5]:SetText("Donator") self.cols[5]:SetTextColor(namecolor.donator) ="keyword">elseif ply:IsUserGroup("headadmin") then self.cols[5]:SetText("Head-Admin") self.cols[5]:SetTextColor(namecolor.headadmin) elseif ply:IsUserGroup("superadmin") then self.cols[5]:SetText("Super-Admin") self.cols[5]:SetTextColor(namecolor.superadmin) ="keyword">end [/code] I think that if this doesn't work it might be that the newer ttt version use's different code to what I made[/QUOTE] Wait wut, my code is nothing like that. Mine is the way you put it, not with all that keyword shit. Idk, might be a copy + paste bug. and I use the TTT that comes with the game or server.
Couldn't you just replace the code with the original terrortown code? That way the code should actually work with no problems because its genuine, you know... lol
[QUOTE=ShadowRanger;40574976]Couldn't you just replace the code with the original terrortown code? That way the code should actually work with no problems because its genuine, you know... lol[/QUOTE] Haven't you even read the post? I want to have ranks on my scoreboard, but it don't work because I keep getting lua errors if I make more ranks than I have already.
[QUOTE=zxEvolution;40580051]Haven't you even read the post? I want to have ranks on my scoreboard, but it don't work because I keep getting lua errors if I make more ranks than I have already.[/QUOTE]Can you please give us an update on what code you have now and what errors your getting? I read the previous errors you were getting but you might have changed it around since.
Sorry, you need to Log In to post a reply to this thread.