• TTT Broke after update
    8 replies, posted
Hi my ttt gamemode broke after all the updates, no i did not add anything after nor before the update and it was working fine before the update. This is the error i get [ERROR] gamemodes/terrortown/gamemode/cl_keys.lua:33: attempt to call method 'PreventAttack' (a nil value) 1. unknown - gamemodes/terrortown/gamemode/cl_keys.lua:33 And it makes it so you can't swap weapons please help! [editline]12th August 2015[/editline] Is there a latest version download anywhere, i'd be willing to try it!
cl_keys updated. [URL="https://github.com/garrynewman/garrysmod/tree/master/garrysmod/gamemodes/terrortown"]Latest version here[/URL]
[QUOTE=JasonMan34;48446684]cl_keys updated. [URL="https://github.com/garrynewman/garrysmod/tree/master/garrysmod/gamemodes/terrortown"]Latest version here[/URL][/QUOTE] I've reinstalled the gamemode and it's still giving me the same error. D;
Paste your cl_wepswitch.lua file
[QUOTE=JasonMan34;48446910]Paste your cl_wepswitch.lua file[/QUOTE] [CODE]we need our own weapon switcher because the hl2 one skips empty weapons local math = math local draw = draw local surface = surface local table = table WSWITCH = {} WSWITCH.Show = false WSWITCH.Selected = -1 WSWITCH.NextSwitch = -1 WSWITCH.WeaponCache = {} WSWITCH.cv = {} WSWITCH.cv.stay = CreateConVar("ttt_weaponswitcher_stay", "0", FCVAR_ARCHIVE) WSWITCH.cv.fast = CreateConVar("ttt_weaponswitcher_fast", "0", FCVAR_ARCHIVE) local delay = 0.03 local showtime = 3 local margin = 10 local width = 300 local height = 20 local barcorner = surface.GetTextureID( "gui/corner8" ) local col_active = { tip = { [ROLE_INNOCENT] = Color(55, 170, 50, 255), [ROLE_TRAITOR] = Color(180, 50, 40, 255), [ROLE_DETECTIVE] = Color(50, 60, 180, 255) }, bg = Color(20, 20, 20, 250), text_empty = Color(200, 20, 20, 255), text = Color(255, 255, 255, 255), shadow = 255 }; local col_dark = { tip = { [ROLE_INNOCENT] = Color(60, 160, 50, 155), [ROLE_TRAITOR] = Color(160, 50, 60, 155), [ROLE_DETECTIVE] = Color(50, 60, 160, 155), }, bg = Color(20, 20, 20, 200), text_empty = Color(200, 20, 20, 100), text = Color(255, 255, 255, 100), shadow = 100 }; -- Draw a bar in the style of the the weapon pickup ones local round = math.Round function WSWITCH:DrawBarBg(x, y, w, h, col) local rx = round(x - 4) local ry = round(y - (h / 2)-4) local rw = round(w + 9) local rh = round(h + 8) local b = 8 --bordersize local bh = b / 2 local role = LocalPlayer():GetRole() or ROLE_INNOCENT local c = col.tip[role] -- Draw the colour tip surface.SetTexture(barcorner) surface.SetDrawColor(c.r, c.g, c.b, c.a) surface.DrawTexturedRectRotated( rx + bh , ry + bh, b, b, 0 ) surface.DrawTexturedRectRotated( rx + bh , ry + rh -bh, b, b, 90 ) surface.DrawRect( rx, ry+b, b, rh-b*2 ) surface.DrawRect( rx+b, ry, h - 4, rh ) -- Draw the remainder -- Could just draw a full roundedrect bg and overdraw it with the tip, but -- I don't have to do the hard work here anymore anyway c = col.bg surface.SetDrawColor(c.r, c.g, c.b, c.a) surface.DrawRect( rx+b+h-4, ry, rw - (h - 4) - b*2, rh ) surface.DrawTexturedRectRotated( rx + rw - bh , ry + rh - bh, b, b, 180 ) surface.DrawTexturedRectRotated( rx + rw - bh , ry + bh, b, b, 270 ) surface.DrawRect( rx+rw-b, ry+b, b, rh-b*2 ) end local TryTranslation = LANG.TryTranslation function WSWITCH:DrawWeapon(x, y, c, wep) if not IsValid(wep) then return false end local name = TryTranslation(wep:GetPrintName() or wep.PrintName or "...") local cl1, am1 = wep:Clip1(), wep:Ammo1() local ammo = false -- Clip1 will be -1 if a melee weapon -- Ammo1 will be false if weapon has no owner (was just dropped) if cl1 != -1 and am1 != false then ammo = Format("%i + %02i", cl1, am1) end -- Slot local spec = {text=wep.Slot+1, font="Trebuchet22", pos={x+4, y}, yalign=TEXT_ALIGN_CENTER, color=c.text} draw.TextShadow(spec, 1, c.shadow) -- Name spec.text = name spec.font = "TimeLeft" spec.pos[1] = x + 10 + height draw.Text(spec) if ammo then local col = c.text if wep:Clip1() == 0 and wep:Ammo1() == 0 then col = c.text_empty end -- Ammo spec.text = ammo spec.pos[1] = ScrW() - margin*3 spec.xalign = TEXT_ALIGN_RIGHT spec.color = col draw.Text(spec) end return true end function WSWITCH:Draw(client) if not self.Show then return end local weps = self.WeaponCache local x = ScrW() - width - margin*2 local y = ScrH() - (#weps * (height + margin)) local col = col_dark for k, wep in pairs(weps) do if self.Selected == k then col = col_active else col = col_dark end self:DrawBarBg(x, y, width, height, col) if not self:DrawWeapon(x, y, col, wep) then self:UpdateWeaponCache() return end y = y + height + margin end end local function SlotSort(a, b) return a and b and a.Slot and b.Slot and a.Slot < b.Slot end local function CopyVals(src, dest) table.Empty(dest) for k, v in pairs(src) do if IsValid(v) then table.insert(dest, v) end end end function WSWITCH:UpdateWeaponCache() -- GetWeapons does not always return a proper numeric table it seems -- self.WeaponCache = LocalPlayer():GetWeapons() -- So copy over the weapon refs self.WeaponCache = {} CopyVals(LocalPlayer():GetWeapons(), self.WeaponCache) table.sort(self.WeaponCache, SlotSort) end function WSWITCH:SetSelected(idx) self.Selected = idx self:UpdateWeaponCache() end function WSWITCH:SelectNext() if self.NextSwitch > CurTime() then return end self:Enable() local s = self.Selected + 1 if s > #self.WeaponCache then s = 1 end self:DoSelect(s) self.NextSwitch = CurTime() + delay end function WSWITCH:SelectPrev() if self.NextSwitch > CurTime() then return end self:Enable() local s = self.Selected - 1 if s < 1 then s = #self.WeaponCache end self:DoSelect(s) self.NextSwitch = CurTime() + delay end -- Select by index function WSWITCH:DoSelect(idx) self:SetSelected(idx) if self.cv.fast:GetBool() then -- immediately confirm if fastswitch is on self:ConfirmSelection(true) end end -- Numeric key access to direct slots function WSWITCH:SelectSlot(slot) if not slot then return end self:Enable() self:UpdateWeaponCache() slot = slot - 1 -- find which idx in the weapon table has the slot we want local toselect = self.Selected for k, w in pairs(self.WeaponCache) do if w.Slot == slot then toselect = k break end end self:DoSelect(toselect) self.NextSwitch = CurTime() + delay end -- Show the weapon switcher function WSWITCH:Enable() if self.Show == false then self.Show = true local wep_active = LocalPlayer():GetActiveWeapon() self:UpdateWeaponCache() -- make our active weapon the initial selection local toselect = 1 for k, w in pairs(self.WeaponCache) do if w == wep_active then toselect = k break end end self:SetSelected(toselect) end -- cache for speed, checked every Think self.Stay = self.cv.stay:GetBool() end -- Hide switcher function WSWITCH:Disable() self.Show = false end -- Switch to the currently selected weapon function WSWITCH:ConfirmSelection(noHide) if not noHide then self:Disable() end for k, w in pairs(self.WeaponCache) do if k == self.Selected and IsValid(w) then RunConsoleCommand("wepswitch", w:GetClass()) return end end end -- Allow for suppression of the attack command function WSWITCH:PreventAttack() return self.Show and !self.cv.fast:GetBool() end function WSWITCH:Think() if (not self.Show) or self.Stay then return end -- hide after period of inaction if self.NextSwitch < (CurTime() - showtime) then self:Disable() end end -- Instantly select a slot and switch to it, without spending time in menu function WSWITCH:SelectAndConfirm(slot) if not slot then return end WSWITCH:SelectSlot(slot) WSWITCH:ConfirmSelection() end local function QuickSlot(ply, cmd, args) if (not IsValid(ply)) or (not args) or #args != 1 then return end local slot = tonumber(args[1]) if not slot then return end local wep = ply:GetActiveWeapon() if IsValid(wep) then if wep.Slot == (slot - 1) then RunConsoleCommand("lastinv") else WSWITCH:SelectAndConfirm(slot) end end end concommand.Add("ttt_quickslot
Why does the first line not start with "--" ?
[QUOTE=JasonMan34;48447279]Why does the first line not start with "--" ?[/QUOTE] it got cut out of the paste, sorry
Someone had this same problem here [url]http://facepunch.com/showthread.php?t=1480784[/url] It was fixed by removing an addon that was referred to as Exho's hud. You should see if you have it. If you can't figure it out, contact the OP in the post I linked
FIXED Thank's!
Sorry, you need to Log In to post a reply to this thread.