-- local customizedelta = 0 local range = 0 local enable_armor = false local armor = Material("tacrp/hud/armor.png", "mip smooth") local body = Material("tacrp/hud/body.png", "mips smooth") local news = Material("tacrp/hud/news.png", "mips smooth") local body_head = Material("tacrp/hud/body_head.png", "mips smooth") local body_chest = Material("tacrp/hud/body_chest.png", "mips smooth") local body_stomach = Material("tacrp/hud/body_stomach.png", "mips smooth") local body_arms = Material("tacrp/hud/body_arms.png", "mips smooth") local body_legs = Material("tacrp/hud/body_legs.png", "mips smooth") local stk_clr = { [1] = Color(255, 75, 75), [2] = Color(120, 20, 20), [3] = Color(130, 90, 90), [4] = Color(60, 35, 35), [5] = Color(80, 80, 80), [6] = Color(160, 160, 160), [7] = Color(180, 180, 180), [8] = Color(200, 200, 200), [9] = Color(220, 220, 220), [10] = Color(240, 240, 240), [11] = Color(255, 255, 255), } local function bodydamagetext(name, dmg, num, mult, x, y, hover) local stk = math.ceil(100 / (dmg * mult)) surface.SetDrawColor(255, 255, 255, 255) surface.SetTextColor(255, 255, 255, 255) surface.DrawLine(TacRP.SS(2), y, x, y) surface.SetFont("TacRP_Myriad_Pro_6") surface.SetTextPos(TacRP.SS(2), y) -- surface.DrawText(name) -- surface.SetTextPos(TacRP.SS(1), y + TacRP.SS(6)) if hover then surface.DrawText(stk .. TacRP:GetPhrase(num > 1 and "unit.ptk" or "unit.stk")) else surface.DrawText(math.floor(dmg * mult)) -- .. (num > 1 and ("×" .. num) or "") end local c = stk_clr[math.Clamp(num > 1 and math.ceil(stk / num) or stk, 1, 11)] if enable_armor then surface.SetDrawColor(c.b, c.g, c.r - (c.r - c.g) * 0.25, 255) else surface.SetDrawColor(c.r, c.g, c.b, 255) end end local lastcustomize = false SWEP.CustomizeHUD = nil function SWEP:CreateCustomizeHUD() self:RemoveCustomizeHUD() gui.EnableScreenClicker(true) TacRP.CursorEnabled = true local bg = vgui.Create("DPanel") self.CustomizeHUD = bg self.StaticStats = true local scrw = ScrW() local scrh = ScrH() local airgap = TacRP.SS(8) local smallgap = TacRP.SS(4) bg:SetPos(0, 0) bg:SetSize(ScrW(), ScrH()) bg.OnRemove = function(self2) if !IsValid(self) then return end if TacRP.ConVars["autosave"]:GetBool() and TacRP.ConVars["free_atts"]:GetBool() then self:SavePreset() end end bg.Paint = function(self2, w, h) if !IsValid(self) or !IsValid(self:GetOwner()) or self:GetOwner():GetActiveWeapon() != self then self2:Remove() if (self.GrenadeMenuAlpha or 0) != 1 then gui.EnableScreenClicker(false) TacRP.CursorEnabled = false end return end local name_txt = TacRP:GetPhrase("wep." .. self:GetClass() .. ".name.full") or TacRP:GetPhrase("wep." .. self:GetClass() .. ".name") or self:GetValue("FullName") or self:GetValue("PrintName") surface.SetFont("TacRP_Myriad_Pro_32") local name_w = surface.GetTextSize(name_txt) surface.SetDrawColor(0, 0, 0, 150) surface.DrawRect(w - name_w - TacRP.SS(20), airgap, name_w + TacRP.SS(12), TacRP.SS(34)) TacRP.DrawCorneredBox(w - name_w - TacRP.SS(20), airgap, name_w + TacRP.SS(12), TacRP.SS(34)) surface.SetTextPos(w - name_w - TacRP.SS(14), airgap) surface.SetTextColor(255, 255, 255) surface.DrawText(name_txt) surface.SetFont("TacRP_Myriad_Pro_12") if self:GetAmmoType() != "" then -- Have to do this weird double wrapping because ammo type strings are apparently case sensitive now (e.g. "Pistol_ammo") local ammo_txt = language.GetPhrase(game.GetAmmoName(game.GetAmmoID(self:GetAmmoType())) .. "_ammo") local ammo_w = surface.GetTextSize(ammo_txt) surface.SetDrawColor(0, 0, 0, 150) surface.DrawRect(w - name_w - ammo_w - TacRP.SS(32) - smallgap, airgap + TacRP.SS(20), ammo_w + TacRP.SS(12), TacRP.SS(14)) TacRP.DrawCorneredBox(w - name_w - ammo_w - TacRP.SS(32) - smallgap, airgap + TacRP.SS(20), ammo_w + TacRP.SS(12), TacRP.SS(14)) surface.SetTextPos(w - name_w - ammo_w - TacRP.SS(30), airgap + TacRP.SS(21)) surface.SetTextColor(255, 255, 255) surface.DrawText(ammo_txt) end if self.SubCatTier and self.SubCatType then local type_txt = TacRP.FormatTierType(self.SubCatType, self.SubCatTier, TacRP.UseTiers()) surface.SetFont("TacRP_Myriad_Pro_12") local type_w = surface.GetTextSize(type_txt) surface.SetDrawColor(0, 0, 0, 150) surface.DrawRect(w - name_w - type_w - TacRP.SS(32) - smallgap, airgap, type_w + TacRP.SS(12), TacRP.SS(18)) TacRP.DrawCorneredBox(w - name_w - type_w - TacRP.SS(32) - smallgap, airgap, type_w + TacRP.SS(12), TacRP.SS(18)) surface.SetTextPos(w - name_w - type_w - TacRP.SS(30), airgap + TacRP.SS(3)) surface.SetTextColor(255, 255, 255) surface.DrawText(type_txt) end end local stack = airgap + TacRP.SS(34) if !self:GetValue("NoRanger") then local ranger = vgui.Create("DPanel", bg) ranger:SetPos(scrw - TacRP.SS(128) - airgap, stack + smallgap) ranger:SetSize(TacRP.SS(128), TacRP.SS(64)) ranger.Paint = function(self2, w, h) if !IsValid(self) then return end surface.SetDrawColor(0, 0, 0, 150) surface.DrawRect(0, 0, w, h) TacRP.DrawCorneredBox(0, 0, w, h) local exp = self:GetValue("ExplosiveDamage") local dmg_max = (self:GetValue("Damage_Max") + exp) * self:GetConfigDamageMultiplier() local dmg_min = (self:GetValue("Damage_Min") + exp) * self:GetConfigDamageMultiplier() local range_min, range_max = self:GetMinMaxRange() surface.SetDrawColor(255, 255, 255, 50) local range_1_y = 2 * (h / 5) local range_2_y = 4 * (h / 5) local range_1_x = 0 local range_2_x = (w / 3) local range_3_x = 2 * (w / 3) if dmg_max < dmg_min then range_1_y = 4 * (h / 5) range_2_y = 2 * (h / 5) elseif dmg_max == dmg_min then range_1_y = 3 * (h / 5) range_2_y = 3 * (h / 5) end if range_min == 0 then range_2_x = 0 range_3_x = w / 2 end surface.DrawLine(range_2_x, 0, range_2_x, h) surface.DrawLine(range_3_x, 0, range_3_x, h) surface.SetDrawColor(255, 255, 255) for i = 0, 1 do surface.DrawLine(range_1_x, range_1_y + i, range_2_x, range_1_y + i) surface.DrawLine(range_2_x, range_1_y + i, range_3_x, range_2_y + i) surface.DrawLine(range_3_x, range_2_y + i, w, range_2_y + i) end local mouse_x, mouse_y = input.GetCursorPos() mouse_x, mouse_y = self2:ScreenToLocal(mouse_x, mouse_y) local draw_rangetext = true if mouse_x > 0 and mouse_x < w and mouse_y > 0 and mouse_y < h then local range_m_x = 0 if mouse_x < range_2_x then range = range_min range_m_x = range_2_x elseif mouse_x > range_3_x then range = range_max range_m_x = range_3_x else local d = (mouse_x - range_2_x) / (range_3_x - range_2_x) range = Lerp(d, range_min, range_max) range_m_x = mouse_x end local dmg = self:GetDamageAtRange(range) + exp * self:GetConfigDamageMultiplier() local txt_dmg1 = tostring(math.Round(dmg)) .. TacRP:GetPhrase("unit.damage") if self:GetValue("Num") > 1 then txt_dmg1 = math.Round(dmg * self:GetValue("Num")) .. "-" .. txt_dmg1 end surface.SetDrawColor(255, 255, 255, 255) surface.DrawLine(range_m_x, 0, range_m_x, h) surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) local txt_dmg1_w = surface.GetTextSize(txt_dmg1) surface.SetTextPos((w / 3) - txt_dmg1_w - (TacRP.SS(2)), TacRP.SS(1)) surface.DrawText(txt_dmg1) local txt_range1 = self:RangeUnitize(range) surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) local txt_range1_w = surface.GetTextSize(txt_range1) surface.SetTextPos((w / 3) - txt_range1_w - (TacRP.SS(2)), TacRP.SS(1 + 8)) surface.DrawText(txt_range1) draw_rangetext = false end if draw_rangetext then local txt_dmg1 = tostring(math.Round(dmg_max)) .. TacRP:GetPhrase("unit.damage") if self:GetValue("Num") > 1 then txt_dmg1 = math.Round(dmg_max * self:GetValue("Num")) .. "-" .. txt_dmg1 end surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) local txt_dmg1_w = surface.GetTextSize(txt_dmg1) surface.SetTextPos((w / 3) - txt_dmg1_w - (TacRP.SS(2)), TacRP.SS(1)) surface.DrawText(txt_dmg1) local txt_range1 = self:RangeUnitize(range_min) surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) local txt_range1_w = surface.GetTextSize(txt_range1) surface.SetTextPos((w / 3) - txt_range1_w - (TacRP.SS(2)), TacRP.SS(1 + 8)) surface.DrawText(txt_range1) local txt_dmg2 = tostring(math.Round(dmg_min)) .. TacRP:GetPhrase("unit.damage") if self:GetValue("Num") > 1 then txt_dmg2 = math.Round(dmg_min * self:GetValue("Num")) .. "-" .. txt_dmg2 end surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) surface.SetTextPos(2 * (w / 3) + (TacRP.SS(2)), TacRP.SS(1)) surface.DrawText(txt_dmg2) local txt_range2 = self:RangeUnitize(range_max) surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) surface.SetTextPos(2 * (w / 3) + (TacRP.SS(2)), TacRP.SS(1 + 8)) surface.DrawText(txt_range2) end end local bodychart = vgui.Create("DPanel", bg) bodychart:SetPos(scrw - TacRP.SS(128 + 44) - airgap, stack + smallgap) bodychart:SetSize(TacRP.SS(40), TacRP.SS(64)) bodychart:SetZPos(100) bodychart.Paint = function(self2, w, h) if !IsValid(self) then return end surface.SetDrawColor(0, 0, 0, 150) surface.DrawRect(0, 0, w, h) TacRP.DrawCorneredBox(0, 0, w, h) local za = TacRP.SS(1) for i=1, 7 do local c = stk_clr[i] if enable_armor then surface.SetDrawColor( c.b, c.g, c.r - (c.r - c.g) * 0.25, 255 ) else surface.SetDrawColor( c.r, c.g, c.b, 255 ) end surface.DrawRect( math.Round(w - (za*5) - za*2), math.Round(h - (za*5*i) - za*2), math.Round(za*5), math.Round(za*5) ) surface.SetTextColor( 255, 255, 255, 127 ) surface.SetFont("TacRP_Myriad_Pro_5") surface.SetTextPos( math.Round(w - za*5 - za*0.7), math.Round(h - (za*5*i) - za*2)) surface.DrawText(i) end local h2 = h - TacRP.SS(4) local w2 = math.ceil(h2 * (136 / 370)) local x2, y2 = w - w2 - TacRP.SS(2), TacRP.SS(2) surface.SetDrawColor(255, 255, 255, 255) surface.SetMaterial(body) surface.DrawTexturedRect(x2, y2, w2, h2) local dmg = self:GetDamageAtRange(range, true) + self:GetValue("ExplosiveDamage") if enable_armor then dmg = dmg * math.Clamp(self:GetValue("ArmorPenetration"), 0, 1) end local num = self:GetValue("Num") local mult = self:GetBodyDamageMultipliers() --self:GetValue("BodyDamageMultipliers") local hover = self2:IsHovered() local upperbody = mult[HITGROUP_STOMACH] == mult[HITGROUP_CHEST] bodydamagetext("Head", dmg, num, mult[HITGROUP_HEAD], w - TacRP.SS(16), upperbody and TacRP.SS(6) or TacRP.SS(4), hover) surface.SetMaterial(body_head) surface.DrawTexturedRect(x2, y2, w2, h2) bodydamagetext("Chest", dmg, num, mult[HITGROUP_CHEST], w - TacRP.SS(16), upperbody and TacRP.SS(18) or TacRP.SS(14), hover) surface.SetMaterial(body_chest) surface.DrawTexturedRect(x2, y2, w2, h2) if !upperbody then bodydamagetext("Stomach", dmg, num, mult[HITGROUP_STOMACH], w - TacRP.SS(16), TacRP.SS(24), hover) end surface.SetMaterial(body_stomach) surface.DrawTexturedRect(x2, y2, w2, h2) bodydamagetext("Arms", dmg, num, mult[HITGROUP_LEFTARM], w - TacRP.SS(22), upperbody and TacRP.SS(30) or TacRP.SS(34), hover) surface.SetMaterial(body_arms) surface.DrawTexturedRect(x2, y2, w2, h2) bodydamagetext("Legs", dmg, num, mult[HITGROUP_LEFTLEG], w - TacRP.SS(18), upperbody and TacRP.SS(42) or TacRP.SS(44), hover) surface.SetMaterial(body_legs) surface.DrawTexturedRect(x2, y2, w2, h2) surface.SetDrawColor(0, 0, 0, 50) surface.SetFont("TacRP_Myriad_Pro_8") local txt = self:RangeUnitize(range) --local tw, th = surface.GetTextSize(txt) --surface.DrawRect(TacRP.SS(1), h - TacRP.SS(10), tw + TacRP.SS(1), th) surface.SetTextPos(TacRP.SS(2) + 2, h - TacRP.SS(10) + 2) surface.SetTextColor(0, 0, 0, 150) surface.DrawText(txt) surface.SetTextColor(255, 255, 255, 255) surface.SetTextPos(TacRP.SS(2), h - TacRP.SS(10)) surface.DrawText(txt) if num > 1 then local txt2 = "×" .. math.floor(num) local tw2 = surface.GetTextSize(txt2) --surface.DrawRect(w - tw2 - TacRP.SS(2), h - TacRP.SS(10), tw2 + TacRP.SS(1), th2) surface.SetTextPos(w - tw2 - TacRP.SS(2) + 2, h - TacRP.SS(10) + 2) surface.SetTextColor(0, 0, 0, 150) surface.DrawText(txt2) surface.SetTextColor(255, 255, 255, 255) surface.SetTextPos(w - tw2 - TacRP.SS(2), h - TacRP.SS(10)) surface.DrawText(txt2) end end local armorbtn = vgui.Create("DLabel", bg) armorbtn:SetText("") armorbtn:SetPos(scrw - TacRP.SS(128 + 44 - 32) - airgap, stack + smallgap + TacRP.SS(2)) armorbtn:SetSize(TacRP.SS(6), TacRP.SS(6)) armorbtn:SetZPos(110) armorbtn:SetMouseInputEnabled(true) armorbtn:MoveToFront() armorbtn.Paint = function(self2, w, h) if !IsValid(self) then return end if enable_armor and self2:IsHovered() then surface.SetDrawColor(Color(255, 255, 255, 255)) elseif self2:IsHovered() then surface.SetDrawColor(Color(255, 220, 220, 255)) elseif enable_armor then surface.SetDrawColor(Color(255, 255, 255, 175)) else surface.SetDrawColor(Color(255, 200, 200, 125)) end surface.SetMaterial(armor) -- surface.DrawTexturedRect(w * 0.2, h * 0.2, w * 0.6, h * 0.6) surface.DrawTexturedRect(0, 0, w, h) end armorbtn.DoClick = function(self2) enable_armor = !enable_armor end stack = stack + TacRP.SS(64) + smallgap end if self:GetValue("PrimaryGrenade") then local desc_box = vgui.Create("DPanel", bg) desc_box:SetSize(TacRP.SS(172), TacRP.SS(108)) desc_box:SetPos(scrw - TacRP.SS(172) - airgap, stack + smallgap) stack = stack + TacRP.SS(48) + smallgap desc_box.Paint = function(self2, w, h) if !IsValid(self) then return end surface.SetDrawColor(0, 0, 0, 150) surface.DrawRect(0, 0, w, h) TacRP.DrawCorneredBox(0, 0, w, h) local nade = TacRP.QuickNades[self:GetValue("PrimaryGrenade")] surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextPos(TacRP.SS(4), TacRP.SS(4)) surface.DrawText( TacRP:GetPhrase("quicknade.fuse") ) surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextPos(TacRP.SS(4), TacRP.SS(12)) surface.DrawText(TacRP:GetPhrase("quicknade." .. nade.PrintName .. ".dettype") or nade.DetType or "") surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) surface.SetTextPos(TacRP.SS(4), TacRP.SS(24)) surface.DrawText(TacRP:GetPhrase("cust.description")) if !self.MiscCache["cust_desc"] then self.MiscCache["cust_desc"] = TacRP.MultiLineText(TacRP:GetPhrase("quicknade." .. nade.PrintName .. ".desc") or nade.Description, w - TacRP.SS(8), "TacRP_Myriad_Pro_8") end for i, k in ipairs(self.MiscCache["cust_desc"]) do surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) surface.SetTextPos(TacRP.SS(4), TacRP.SS(32) + (TacRP.SS(8 * (i - 1)))) surface.DrawText(k) end end else local tabs_h = TacRP.SS(8) local desc_box = vgui.Create("DPanel", bg) desc_box.PrintName = TacRP:GetPhrase("cust.description2") desc_box:SetSize(TacRP.SS(172), TacRP.SS(36)) desc_box:SetPos(scrw - TacRP.SS(172) - airgap, stack + smallgap + tabs_h + TacRP.SS(2)) desc_box.Paint = function(self2, w, h) if !IsValid(self) then return end surface.SetDrawColor(0, 0, 0, 150) surface.DrawRect(0, 0, w, h) TacRP.DrawCorneredBox(0, 0, w, h) if !self.MiscCache["cust_desc"] then local phrase = TacRP:GetPhrase("wep." .. self:GetClass() .. ".desc") or self.Description self.MiscCache["cust_desc"] = TacRP.MultiLineText(phrase, w - TacRP.SS(8), "TacRP_Myriad_Pro_8") end surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) for i, k in pairs(self.MiscCache["cust_desc"]) do surface.SetTextPos(TacRP.SS(4), TacRP.SS(2) + (TacRP.SS(8 * (i - 1)))) surface.DrawText(k) end -- local lastseenquoteline = false -- local startseequotelinetime = 0 local phrase_quote = TacRP:GetPhrase("wep." .. self:GetClass() .. ".desc.quote") or self.Description_Quote -- local phrase_quote = "THIS IS A TEST QUOTE THAT IS VERY LONG IN LENGTH TO TEST SCROLLING TEXT THIS IS A TEST" if phrase_quote then surface.SetFont("TacRP_Myriad_Pro_6_Italic") local tw, th = surface.GetTextSize(phrase_quote) surface.SetTextPos(TacRP.SS(4), TacRP.SS(34) - th) -- if tw > TacRP.SS(166) then -- surface.SetFont("TacRP_Myriad_Pro_6_Italic") -- tw, th = surface.GetTextSize(phrase_quote) -- lastseenquoteline = true -- surface.SetTextPos(TacRP.SS(200) - ((CurTime() - startseequotelinetime) * 100) % (tw * 2.25), TacRP.SS(34) - th) -- end surface.SetTextColor(255, 255, 255) surface.DrawText(phrase_quote) end end local trivia_box = vgui.Create("DPanel", bg) trivia_box.PrintName = TacRP:GetPhrase("cust.trivia") trivia_box:SetSize(TacRP.SS(172), TacRP.SS(36)) trivia_box:SetPos(scrw - TacRP.SS(172) - airgap, stack + smallgap + tabs_h + TacRP.SS(2)) trivia_box.Paint = function(self2, w, h) if !IsValid(self) then return end surface.SetDrawColor(0, 0, 0, 150) surface.DrawRect(0, 0, w, h) TacRP.DrawCorneredBox(0, 0, w, h) surface.SetFont("TacRP_Myriad_Pro_10") surface.SetTextColor(255, 255, 255) surface.SetTextPos(TacRP.SS(4), TacRP.SS(6)) local manu_str = TacRP:GetPhrase("wep." .. self:GetClass() .. ".trivia.manufacturer") or TacRP:TryTranslate(self:GetValue("Trivia_Manufacturer")) or TacRP:GetPhrase("trivia.unknown") local manu_w = surface.GetTextSize(manu_str) if manu_w + TacRP.SS(6) >= w / 2 then surface.SetFont("TacRP_Myriad_Pro_8") if !self.MiscCache["cust_manufacturer"] then self.MiscCache["cust_manufacturer"] = TacRP.MultiLineText(manu_str, w / 2 - TacRP.SS(2), "TacRP_Myriad_Pro_8") end for i, k in pairs(self.MiscCache["cust_manufacturer"]) do surface.SetTextPos(TacRP.SS(4), TacRP.SS(7) + (TacRP.SS(6 * (i - 1)))) surface.DrawText(k) end else surface.DrawText(manu_str) end surface.SetFont("TacRP_Myriad_Pro_10") surface.SetTextPos(TacRP.SS(4), TacRP.SS(24)) surface.DrawText(TacRP:GetPhrase("wep." .. self:GetClass() .. ".trivia.year") or TacRP:TryTranslate(self:GetValue("Trivia_Year")) or TacRP:GetPhrase("trivia.unknown")) surface.SetTextPos(w / 2, TacRP.SS(6)) surface.DrawText(TacRP:GetPhrase("wep." .. self:GetClass() .. ".trivia.caliber") or TacRP:TryTranslate(self:GetValue("Trivia_Caliber")) or TacRP:GetPhrase("trivia.unknown")) surface.SetTextPos(w / 2, TacRP.SS(24)) surface.DrawText(TacRP:GetPhrase(TacRP.FactionToPhrase[self:GetValue("Faction")])) surface.SetFont("TacRP_Myriad_Pro_6") surface.SetTextColor(255, 255, 255) surface.SetTextPos(TacRP.SS(4), TacRP.SS(2)) surface.DrawText(TacRP:GetPhrase("trivia.manufacturer")) surface.SetTextPos(TacRP.SS(4), TacRP.SS(20)) surface.DrawText(TacRP:GetPhrase("trivia.year")) surface.SetTextPos(w / 2, TacRP.SS(2)) surface.DrawText(TacRP:GetPhrase("trivia.caliber")) surface.SetTextPos(w / 2, TacRP.SS(20)) surface.DrawText(TacRP:GetPhrase("trivia.faction")) end local credits_box = vgui.Create("DPanel", bg) credits_box.PrintName = TacRP:GetPhrase("cust.credits") credits_box:SetSize(TacRP.SS(172), TacRP.SS(36)) credits_box:SetPos(scrw - TacRP.SS(172) - airgap, stack + smallgap + tabs_h + TacRP.SS(2)) credits_box.Paint = function(self2, w, h) if !IsValid(self) or !self.Credits then return end surface.SetDrawColor(0, 0, 0, 150) surface.DrawRect(0, 0, w, h) TacRP.DrawCorneredBox(0, 0, w, h) if !self.MiscCache["cust_credits"] then local creditphrase = TacRP:GetPhrase("wep." .. self:GetClass() .. ".credits") or self.Credits self.MiscCache["cust_credits"] = TacRP.MultiLineText(creditphrase, w - TacRP.SS(8), "TacRP_Myriad_Pro_8") end for i, k in ipairs(self.MiscCache["cust_credits"]) do surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) surface.SetTextPos(TacRP.SS(4), TacRP.SS(2) + TacRP.SS(8 * (i - 1))) surface.DrawText(k) end end local tabs = {desc_box} if self.Trivia_Caliber or self.Trivia_Manufacturer or self.Trivia_Year then table.insert(tabs, trivia_box) else trivia_box:Hide() end if self.Credits then table.insert(tabs, credits_box) else trivia_box:Hide() end self.ActiveDescTab = self.ActiveDescTab or 1 local tabs_w = TacRP.SS(172) / #tabs - #tabs * TacRP.SS(0.5) for i = 1, #tabs do if i != self.ActiveDescTab then tabs[i]:Hide() end local tab_button = vgui.Create("DLabel", bg) tab_button.TabIndex = i tab_button:SetSize(tabs_w, tabs_h) tab_button:SetPos(scrw - TacRP.SS(172) - airgap + (TacRP.SS(2) + tabs_w) * (i - 1), stack + smallgap) tab_button:SetText("") tab_button:SetMouseInputEnabled(true) tab_button:MoveToFront() tab_button.Paint = function(self2, w2, h2) if !IsValid(self) then return end local hover = #tabs > 1 and self2:IsHovered() local selected = #tabs > 1 and self.ActiveDescTab == i local col_bg = Color(0, 0, 0, 150) local col_corner = Color(255, 255, 255) local col_text = Color(255, 255, 255) if selected then col_bg = Color(150, 150, 150, 150) col_corner = Color(50, 50, 255) col_text = Color(0, 0, 0) if hover then col_bg = Color(255, 255, 255) col_corner = Color(150, 150, 255) col_text = Color(0, 0, 0) end elseif hover then col_bg = Color(255, 255, 255) col_corner = Color(0, 0, 0) col_text = Color(0, 0, 0) end surface.SetDrawColor(col_bg) surface.DrawRect(0, 0, w2, h2) TacRP.DrawCorneredBox(0, 0, w2, h2, col_corner) draw.SimpleText(tabs[i].PrintName, "TacRP_Myriad_Pro_8", w2 / 2, h2 / 2, col_text, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER) end tab_button.DoClick = function(self2) if self2.TabIndex == self.ActiveDescTab then return end self.ActiveDescTab = self2.TabIndex for j = 1, #tabs do if j != self.ActiveDescTab then tabs[j]:Hide() else tabs[j]:Show() end end end end stack = stack + TacRP.SS(48) + smallgap end if !self:GetValue("NoStatBox") then local statgroup = self:GetValue("PrimaryMelee") and self.StatGroupsMelee or self.StatGroups local statdisplay = self:GetValue("PrimaryMelee") and self.StatDisplayMelee or self.StatDisplay local tabs_h = TacRP.SS(10) local group_box = vgui.Create("DPanel", bg) group_box.PrintName = TacRP:GetPhrase("cust.rating") group_box:SetSize(TacRP.SS(164), TacRP.SS(172)) group_box:SetPos(scrw - TacRP.SS(164) - airgap - smallgap, stack + smallgap * 2 + tabs_h) group_box.Paint = function(self2) if !IsValid(self) then return end local w, h = TacRP.SS(172), TacRP.SS(16) local x, y = 0, 0 local hovered = false local hoverindex = 0 local hoverscore = 0 for i, v in ipairs(statgroup) do if !self.StatScoreCache[i] then self.StaticStats = true local sb = v.RatingFunction(self, true) local sc = v.RatingFunction(self, false) local ib, ic = 0, 0 for j = 1, #self.StatGroupGrades do if ib == 0 and sb > self.StatGroupGrades[j][1] then ib = j end if ic == 0 and sc > self.StatGroupGrades[j][1] then ic = j end end self.StatScoreCache[i] = {{math.min(sc or 0, 100), ic}, {math.min(sb or 0, 100), ib}} self.StaticStats = false end local scorecache = self.StatScoreCache[i] local f = scorecache[1][1] / 100 local f_base = scorecache[2][1] / 100 local w2, h2 = TacRP.SS(95), TacRP.SS(8) surface.SetDrawColor(0, 0, 0, 150) surface.DrawRect(x, y, w, h) TacRP.DrawCorneredBox(x, y, w, h) draw.SimpleText(TacRP:GetPhrase(v.Name) or v.Name, "TacRP_Myriad_Pro_10", x + TacRP.SS(4), y + TacRP.SS(8), color_white, TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER) surface.SetDrawColor(75, 75, 75, 100) surface.DrawRect(x + TacRP.SS(64), y + TacRP.SS(4), w2, h2) surface.SetDrawColor(Lerp(f, 200, 0), Lerp(f, 0, 200), 0, 150) surface.DrawRect(x + TacRP.SS(64), y + TacRP.SS(4), w2 * f, h2) surface.SetDrawColor(0, 0, 0, 0) TacRP.DrawCorneredBox(x + TacRP.SS(64), y + TacRP.SS(4), w2, h2) for j = 1, 4 do surface.SetDrawColor(255, 255, 255, 125) surface.DrawRect(x + TacRP.SS(64) + w2 * (j / 5) - 0.5, y + h2 - TacRP.SS(1.5), 1, TacRP.SS(3)) end surface.SetDrawColor(255, 255, 255, 20) surface.DrawRect(x + TacRP.SS(64), y + TacRP.SS(2.5) + h2 / 2, w2 * f_base, TacRP.SS(3)) local grade = self.StatGroupGrades[scorecache[1][2]] if grade then draw.SimpleText(grade[2], "TacRP_HD44780A00_5x8_8", x + TacRP.SS(61), y + TacRP.SS(7.5), grade[3], TEXT_ALIGN_RIGHT, TEXT_ALIGN_CENTER) end local mx, my = self2:CursorPos() if mx > 0 and mx <= w and my > y and my <= y + h then hovered = true hoverindex = i hoverscore = scorecache[1][1] end y = y + TacRP.SS(18) end if hovered then local v = statgroup[hoverindex] local todo = DisableClipping(true) local col_bg = Color(0, 0, 0, 254) local col_corner = Color(255, 255, 255) local col_text = Color(255, 255, 255) local rx, ry = self2:CursorPos() rx = rx + TacRP.SS(16) ry = ry + TacRP.SS(16) local desc = TacRP:GetPhrase(v.Description) or v.Description or "" desc = string.Explode("\n", desc) if self2:GetY() + ry >= TacRP.SS(280) then ry = ry - TacRP.SS(60) end if self2:GetX() + rx + TacRP.SS(160) >= ScrW() then rx = rx - TacRP.SS(160) end local bw, bh = TacRP.SS(160), TacRP.SS(12 + (6 * #desc)) surface.SetDrawColor(col_bg) TacRP.DrawCorneredBox(rx, ry, bw, bh, col_corner) local txt = TacRP:GetPhrase(v.Name) or v.Name surface.SetTextColor(col_text) surface.SetFont("TacRP_Myriad_Pro_10") surface.SetTextPos(rx + TacRP.SS(2), ry + TacRP.SS(1)) surface.DrawText(txt) local scoretxt = TacRP:GetPhrase("rating.score", {score = math.Round(hoverscore, 1), max = 100}) draw.SimpleText(scoretxt, "TacRP_Myriad_Pro_8", rx + bw - TacRP.SS(2), ry + TacRP.SS(2), col_text, TEXT_ALIGN_RIGHT, TEXT_ALIGN_TOP) surface.SetFont("TacRP_Myriad_Pro_6") for j, k in pairs(desc) do surface.SetTextPos(rx + TacRP.SS(2), ry + TacRP.SS(1 + 8 + 2) + (TacRP.SS(6 * (j - 1)))) surface.DrawText(k) end DisableClipping(todo) end end local w_statbox = TacRP.SS(164) local x_3 = w_statbox - TacRP.SS(32) local x_2 = x_3 - TacRP.SS(32) local x_1 = x_2 - TacRP.SS(32) local function updatestat(i, k) if k.ConVarCheck then if !k.ConVar then k.ConVar = GetConVar(k.ConVarCheck) end if k.ConVar:GetBool() == tobool(k.ConVarInvert) then return end end if k.Spacer then self.MiscCache["statbox"][i] = {} return end local value = self:GetValue(k.Value) local orig = self:GetBaseValue(k.Value) local diff = nil if k.HideIfSame and orig == value then return end if k.DefaultValue != nil and value == k.DefaultValue and orig == k.DefaultValue then return end if k.ValueCheck and self:GetValue(k.ValueCheck) != !k.ValueInvert then return end local stat_base = 0 local stat_curr = 0 if k.AggregateFunction then stat_base = k.AggregateFunction(self, true, orig) stat_curr = k.AggregateFunction(self, false, value) else stat_base = math.Round(orig, 4) stat_curr = math.Round(value, 4) end if stat_base == nil and stat_cur == nil then return end if k.DifferenceFunction then diff = k.DifferenceFunction(self, orig, value) elseif isnumber(stat_base) and isnumber(stat_curr) then if stat_curr == stat_base then diff = "" else diff = math.Round((stat_curr / stat_base - 1) * 100) if diff > 0 then diff = "+" .. tostring(diff) .. "%" else diff = tostring(diff) .. "%" end end end local txt_base = tostring(stat_base) local txt_curr = tostring(stat_curr) if isbool(stat_base) then if stat_base then txt_base = "YES" else txt_base = "NO" end if stat_curr then txt_curr = "YES" else txt_curr = "NO" end end if k.DisplayFunction then txt_base = k.DisplayFunction(self, true, orig) txt_curr = k.DisplayFunction(self, false, value) end if k.Unit then local unit = TacRP:TryTranslate(k.Unit) txt_base = txt_base .. unit txt_curr = txt_curr .. unit end local good = false local goodorbad = false if k.BetterFunction then goodorbad, good = k.BetterFunction(self, orig, value) elseif stat_base != stat_curr then if isnumber(stat_curr) then good = stat_curr > stat_base goodorbad = true elseif isbool(stat_curr) then good = !stat_base and stat_curr goodorbad = true end end if k.LowerIsBetter then good = !good end if goodorbad then if good then surface.SetTextColor(175, 255, 175) else surface.SetTextColor(255, 175, 175) end else surface.SetTextColor(255, 255, 255) end self.MiscCache["statbox"][i] = {txt_base, txt_curr, goodorbad, good, diff} end local function populate_stats(layout) if !IsValid(self) then return end self.StaticStats = true layout:Clear() self.MiscCache["statbox"] = {} self.StatRows = {} for i, k in ipairs(statdisplay) do updatestat(i, k) if !self.MiscCache["statbox"][i] then continue end local spacer = k.Spacer local row = layout:Add("DPanel") row:SetSize(w_statbox, TacRP.SS(spacer and 12 or 9)) row.StatIndex = i row.Paint = function(self2, w, h) if !IsValid(self) then return end if !self.MiscCache["statbox"] then populate_stats(layout) end local sicache = self.MiscCache["statbox"][self2.StatIndex] if !sicache then self2:Remove() return end surface.SetFont(spacer and "TacRP_Myriad_Pro_11" or "TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) surface.SetTextPos(TacRP.SS(3), 0) local name = TacRP:GetPhrase(k.Name) or k.Name surface.DrawText(name .. (spacer and "" or ":")) if !spacer then surface.SetDrawColor(255, 255, 255) surface.SetTextPos(x_1 + TacRP.SS(4), 0) surface.DrawText(sicache[1]) if sicache[3] then if sicache[4] then surface.SetTextColor(175, 255, 175) else surface.SetTextColor(255, 175, 175) end end if sicache[2] != sicache[1] then surface.SetTextPos(x_2 + TacRP.SS(4), 0) surface.DrawText(sicache[2]) end if sicache[5] then surface.SetTextPos(x_3 + TacRP.SS(4), 0) surface.DrawText(sicache[5]) end end surface.SetDrawColor(255, 255, 255, k.Spacer and 125 or 5) local um, umm = k.Spacer and 3 or 1, k.Spacer and 2 or 1 surface.DrawRect( 0, h-um, w, umm ) end self.StatRows[row] = i end self.StaticStats = false end local stat_box = vgui.Create("DPanel", bg) stat_box.PrintName = TacRP:GetPhrase("cust.stats") stat_box:SetSize(w_statbox, TacRP.SS(172)) stat_box:SetPos(scrw - w_statbox - airgap - smallgap, stack + smallgap * 2 + tabs_h) stat_box.Paint = function(self2, w, h) if !IsValid(self) then return end surface.SetDrawColor(0, 0, 0, 150) surface.DrawRect(0, 0, w, h) TacRP.DrawCorneredBox(0, 0, w, h) surface.SetDrawColor(255, 255, 255, 100) --surface.DrawLine(x_1, 0, x_1, h) --surface.DrawLine(x_2, 0, x_2, h) --surface.DrawLine(x_3, 0, x_3, h) surface.DrawLine(0, TacRP.SS(2 + 8 + 1), w, TacRP.SS(2 + 8 + 1)) surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) surface.SetTextPos(TacRP.SS(4), TacRP.SS(2)) surface.DrawText(TacRP:GetPhrase("stat.table.stat")) surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) surface.SetTextPos(x_1 + TacRP.SS(4), TacRP.SS(2)) surface.DrawText(TacRP:GetPhrase("stat.table.base")) surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) surface.SetTextPos(x_2 + TacRP.SS(4), TacRP.SS(2)) surface.DrawText(TacRP:GetPhrase("stat.table.curr")) surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(255, 255, 255) surface.SetTextPos(x_3 + TacRP.SS(4), TacRP.SS(2)) surface.DrawText(TacRP:GetPhrase("stat.table.diff")) end local stat_scroll = vgui.Create("DScrollPanel", stat_box) stat_scroll:Dock(FILL) stat_scroll:DockMargin(0, TacRP.SS(12), 0, 0) local sbar = stat_scroll:GetVBar() function sbar:Paint(w, h) end function sbar.btnUp:Paint(w, h) local c_bg, c_txt = TacRP.GetPanelColor("bg2", self:IsHovered()), TacRP.GetPanelColor("text", self:IsHovered()) surface.SetDrawColor(c_bg) surface.DrawRect(0, 0, w, h) draw.SimpleText("↑", "TacRP_HD44780A00_5x8_4", w / 2, h / 2, c_txt, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER) end function sbar.btnDown:Paint(w, h) local c_bg, c_txt = TacRP.GetPanelColor("bg2", self:IsHovered()), TacRP.GetPanelColor("text", self:IsHovered()) surface.SetDrawColor(c_bg) surface.DrawRect(0, 0, w, h) draw.SimpleText("↓", "TacRP_HD44780A00_5x8_4", w / 2, h / 2, c_txt, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER) end function sbar.btnGrip:Paint(w, h) local c_bg, c_cnr = TacRP.GetPanelColor("bg2", self:IsHovered()), TacRP.GetPanelColor("corner", self:IsHovered()) surface.SetDrawColor(c_bg) TacRP.DrawCorneredBox(0, 0, w, h, c_cnr) end local stat_layout = vgui.Create("DIconLayout", stat_scroll) stat_layout:Dock(FILL) stat_layout:SetLayoutDir(TOP) -- stat_layout:SetSpaceY(TacRP.SS(2)) populate_stats(stat_layout) stat_box.PaintOver = function(self2, w, h) if !IsValid(self) then return end local panel = vgui.GetHoveredPanel() if self.StatRows[panel] then local stat = statdisplay[self.StatRows[panel]] local todo = DisableClipping(true) local col_bg = Color(0, 0, 0, 254) local col_corner = Color(255, 255, 255) local col_text = Color(255, 255, 255) local rx, ry = self2:CursorPos() rx = rx + TacRP.SS(16) ry = ry + TacRP.SS(16) local desc = istable(stat.Description) and stat.Description or TacRP:GetPhrase(stat.Description) or stat.Description or "" if isstring(desc) then desc = string.Explode("\n", desc) end if self2:GetY() + ry >= TacRP.SS(280) then ry = ry - TacRP.SS(60) end if self2:GetX() + rx + TacRP.SS(160) >= ScrW() then rx = rx - TacRP.SS(160) end local bw, bh = TacRP.SS(160), TacRP.SS(12 + (6 * #desc)) surface.SetDrawColor(col_bg) TacRP.DrawCorneredBox(rx, ry, bw, bh, col_corner) local txt = TacRP:GetPhrase(stat.Name) or stat.Name surface.SetTextColor(col_text) surface.SetFont("TacRP_Myriad_Pro_10") surface.SetTextPos(rx + TacRP.SS(2), ry + TacRP.SS(1)) surface.DrawText(txt) surface.SetFont("TacRP_Myriad_Pro_6") for i, k in pairs(desc) do surface.SetTextPos(rx + TacRP.SS(2), ry + TacRP.SS(1 + 8 + 2) + (TacRP.SS(6 * (i - 1)))) surface.DrawText(k) end DisableClipping(todo) end end local tabs = {group_box, stat_box} self.ActiveTab = self.ActiveTab or 1 -- local tab_list = vgui.Create("DPanel", bg) -- tab_list:SetSize(TacRP.SS(172), tabs_h) -- tab_list:SetPos(scrw - TacRP.SS(172) - airgap, stack + smallgap) -- tab_list:SetMouseInputEnabled(false) -- tab_list.Paint = function() return end local tabs_w = TacRP.SS(172) / #tabs - #tabs * TacRP.SS(0.5) for i = 1, #tabs do if i != self.ActiveTab then tabs[i]:Hide() end local tab_button = vgui.Create("DLabel", bg) tab_button.TabIndex = i tab_button:SetSize(tabs_w, tabs_h) tab_button:SetPos(scrw - TacRP.SS(172) - airgap + (TacRP.SS(2) + tabs_w) * (i - 1), stack + smallgap) tab_button:SetText("") tab_button:SetMouseInputEnabled(true) tab_button:MoveToFront() tab_button.Paint = function(self2, w2, h2) if !IsValid(self) then return end local hover = self2:IsHovered() local selected = self.ActiveTab == i local col_bg = Color(0, 0, 0, 150) local col_corner = Color(255, 255, 255) local col_text = Color(255, 255, 255) if selected then col_bg = Color(150, 150, 150, 150) col_corner = Color(50, 50, 255) col_text = Color(0, 0, 0) if hover then col_bg = Color(255, 255, 255) col_corner = Color(150, 150, 255) col_text = Color(0, 0, 0) end elseif hover then col_bg = Color(255, 255, 255) col_corner = Color(0, 0, 0) col_text = Color(0, 0, 0) end surface.SetDrawColor(col_bg) surface.DrawRect(0, 0, w2, h2) TacRP.DrawCorneredBox(0, 0, w2, h2, col_corner) draw.SimpleText(tabs[i].PrintName, "TacRP_Myriad_Pro_8", w2 / 2, h2 / 2, col_text, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER) end tab_button.DoClick = function(self2) if self2.TabIndex == self.ActiveTab then return end self.ActiveTab = self2.TabIndex for j = 1, #tabs do if j != self.ActiveTab then tabs[j]:Hide() else tabs[j]:Show() end end end end end local attachment_slots = {} local offset = (scrh - (TacRP.SS(34 + 8) * table.Count(self.Attachments))) / 2 self.Attachments["BaseClass"] = nil if TacRP.ConVars["cust_legacy"]:GetBool() then for slot, attslot in pairs(self.Attachments) do local atts = TacRP.GetAttsForCats(attslot.Category or "", self) attachment_slots[slot] = {} local slot_name = vgui.Create("DPanel", bg) slot_name:SetPos(airgap, offset + airgap - TacRP.SS(8) + ((slot - 1) * TacRP.SS(34 + 8))) slot_name:SetSize(TacRP.SS(128), TacRP.SS(8)) slot_name.Paint = function(self2, w, h) if !IsValid(self) then return end local txt = TacRP:TryTranslate(attslot.PrintName or "Slot") if txt then surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(Color(255, 255, 255)) surface.SetTextPos(0, 0) surface.DrawText(txt) end end table.sort(atts, function(a, b) a = a or "" b = b or "" if a == "" or b == "" then return true end local atttbl_a = TacRP.GetAttTable(a) local atttbl_b = TacRP.GetAttTable(b) local order_a = 0 local order_b = 0 order_a = atttbl_a.SortOrder or order_a order_b = atttbl_b.SortOrder or order_b if order_a == order_b then return (atttbl_a.PrintName or "") < (atttbl_b.PrintName or "") end return order_a < order_b end) local prosconspanel = vgui.Create("DPanel", bg) prosconspanel:SetPos(airgap + ((table.Count(atts)) * TacRP.SS(34)), offset + airgap + ((slot - 1) * TacRP.SS(34 + 8))) prosconspanel:SetSize(TacRP.SS(128), TacRP.SS(34)) prosconspanel.Paint = function(self2, w, h) if !IsValid(self) then return end local installed = attslot.Installed if !installed then return end local atttbl = TacRP.GetAttTable(installed) local pros = atttbl.Pros or {} local cons = atttbl.Cons or {} local c = 0 for i, pro in pairs(pros) do surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(Color(50, 255, 50)) surface.SetTextPos(0, TacRP.SS(c * 8)) surface.DrawText("+" .. TacRP:TryTranslate(pro)) c = c + 1 end for i, con in pairs(cons) do surface.SetFont("TacRP_Myriad_Pro_8") surface.SetTextColor(Color(255, 50, 50)) surface.SetTextPos(0, TacRP.SS(c * 8)) surface.DrawText("-" .. TacRP:TryTranslate(con)) c = c + 1 end end for i, att in pairs(atts) do local slot_panel = vgui.Create("TacRPAttSlot", bg) table.insert(attachment_slots[slot], slot_panel) slot_panel:SetSlot(slot) slot_panel:SetShortName(att) slot_panel:SetWeapon(self) slot_panel:SetPos(airgap + ((i - 1) * TacRP.SS(34)), offset + airgap + ((slot - 1) * TacRP.SS(34 + 8))) slot_panel:SetSize(TacRP.SS(32), TacRP.SS(32)) end end else local rows = 1 local cnt = table.Count(self.Attachments) if cnt > 5 then cnt = math.ceil(cnt / 2) rows = 2 end local ph = math.min(scrh, TacRP.SS((42 + 6) * cnt)) local layout = vgui.Create("DIconLayout", bg) layout:SetSize(TacRP.SS(32 * rows + 6 * (rows - 1)), ph) layout:SetPos(airgap, scrh / 2 - ph / 2) layout:SetSpaceX(math.floor(TacRP.SS(6))) layout:SetSpaceY(math.floor(TacRP.SS(6))) layout:SetLayoutDir(LEFT) bg.SlotLayout = layout local scroll = vgui.Create("DScrollPanel", bg) scroll:SetSize(TacRP.SS(100), scrh * 0.9) scroll:SetPos(airgap * 2 + layout:GetWide(), scrh * 0.05) scroll:SetVisible(false) local slotlayout = vgui.Create("TacRPAttSlotLayout", scroll) slotlayout:SetSize(TacRP.SS(100), scrh) slotlayout:SetWeapon(self) slotlayout:SetScroll(scroll) slotlayout:SetSpaceY(TacRP.SS(4)) slotlayout:SetSpaceX(TacRP.SS(4)) slotlayout:SetLayoutDir(TOP) if self.LastCustomizeSlot then slotlayout:SetSlot(self.LastCustomizeSlot) end bg.ScrollLayout = slotlayout -- slotlayout:Dock(FILL) for slot, attslot in pairs(self.Attachments) do attachment_slots[slot] = {} local slot_bg = vgui.Create("DPanel", layout) slot_bg:SetSize(TacRP.SS(32), TacRP.SS(42)) slot_bg.Paint = function() end local slot_icon = vgui.Create("TacRPAttSlot", slot_bg) slot_icon:SetSlot(slot) if (attslot.Installed or "") != "" then slot_icon:SetShortName(attslot.Installed) end slot_icon:SetWeapon(self) slot_icon:SetIsMenu(true) slot_icon:SetSlotLayout(slotlayout) slot_icon:SetPos(0, TacRP.SS(10)) slot_icon:SetSize(TacRP.SS(32), TacRP.SS(32)) local slot_name = vgui.Create("DPanel", slot_bg) slot_name:SetSize(TacRP.SS(32), TacRP.SS(8)) slot_name.Paint = function(self2, w, h) if !IsValid(self) then return end local col_bg, col_corner, col_text = slot_icon:GetColors() surface.SetDrawColor(col_bg) surface.DrawRect(0, 0, w, h) TacRP.DrawCorneredBox(0, 0, w, h, col_corner) local txt = TacRP:TryTranslate(attslot.PrintName or "Slot") if txt then draw.SimpleText(txt, "TacRP_Myriad_Pro_8", w / 2, h / 2, col_text, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER) end end end end local cvarbox = vgui.Create("DCheckBox", bg) cvarbox:SetSize(TacRP.SS(8), TacRP.SS(8)) cvarbox:SetPos(airgap, scrh - TacRP.SS(10)) cvarbox:SetText("") cvarbox:SetConVar("tacrp_cust_legacy") function cvarbox.Paint(self2, w, h) local c_bg, c_cnr, c_txt = TacRP.GetPanelColors(self2:IsHovered(), self2:GetChecked()) surface.SetDrawColor(c_bg) surface.DrawRect(0, 0, w, h) TacRP.DrawCorneredBox(0, 0, w, h, c_cnr) if self2:GetChecked() then draw.SimpleText("O", "TacRP_HD44780A00_5x8_4", w / 2, h / 2, c_txt, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER) end local todo = DisableClipping(true) draw.SimpleText(TacRP:GetPhrase("menu.legacy") or "Legacy Menu", "TacRP_Myriad_Pro_8", w + TacRP.SS(2), h / 2, color_white, TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER) DisableClipping(todo) end function cvarbox.DoClick(self2) self2:Toggle() timer.Simple(0, function() self:CreateCustomizeHUD() end) end -- tacrp_drop local primarygrenade = self:GetValue("PrimaryGrenade") if (engine.ActiveGamemode() == "terrortown" or TacRP.ConVars["allowdrop"]:GetBool()) and TacRP.ConVars["cust_drop"]:GetBool() and (!primarygrenade or !TacRP.IsGrenadeInfiniteAmmo(primarygrenade)) then local phrase = primarygrenade and "cust.drop_nade" or "cust.drop_wep" local dropbox = vgui.Create("DButton", bg) local bw, bh = TacRP.SS(52), TacRP.SS(10) dropbox:SetSize(bw, bh) dropbox:SetPos(ScrW() / 2 - bw / 2, scrh - bh - smallgap / 2) dropbox:SetText("") function dropbox.Paint(self2, w, h) local c_bg, c_cnr, c_txt = TacRP.GetPanelColors(self2:IsHovered(), self2:IsDown()) surface.SetDrawColor(c_bg) -- surface.DrawRect(0, 0, w, h) TacRP.DrawCorneredBox(0, 0, w, h, c_cnr) draw.SimpleText(TacRP:GetPhrase(phrase), "TacRP_Myriad_Pro_8", w / 2, h / 2, c_txt, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER) end function dropbox.DoClick(self2) if engine.ActiveGamemode() == "terrortown" then LocalPlayer():ConCommand("ttt_dropweapon") else LocalPlayer():ConCommand("tacrp_drop") end end end local news_s = TacRP.SS(12) local news_i = TacRP.SS(8) local newsbutton = vgui.Create("DButton", bg) newsbutton:SetSize(news_s, news_s) newsbutton:SetPos(smallgap, smallgap / 2) newsbutton:SetText("") function newsbutton.Paint(self2, w, h) local c_bg, c_cnr, c_txt = TacRP.GetPanelColors(self2:IsHovered(), self2:IsDown()) surface.SetDrawColor(c_bg) TacRP.DrawCorneredBox(0, 0, w, h, c_cnr) if self2.flash then local todo = DisableClipping(true) draw.NoTexture() surface.SetDrawColor(c_bg) draw.SimpleTextOutlined(string.upper(self2.flash), "TacRP_HD44780A00_5x8_6", w + smallgap, h / 2, color_white, TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER, 2, Color(0, 0, 0, 150)) DisableClipping(todo) local c = (math.sin(SysTime() * 10)) * 30 + (self2:IsHovered() and 50 or 225) surface.SetDrawColor(c, c, c, 255) else surface.SetDrawColor(c_txt) end surface.SetMaterial(news) surface.DrawTexturedRect((news_s - news_i) / 2, (news_s - news_i) / 2, news_i,news_i) end function newsbutton.DoClick(self2) LocalPlayer():ConCommand("tacrp_news") end TacRP.FetchNews(function() if !self.CustomizeHUD then return end for i, v in ipairs(TacRP.NewsLoaded) do if IsValid(newsbutton) and !TacRP.NewsRead[v.Key] then newsbutton.flash = v.Type or "article" break end end end) hook.Run("TacRP_CreateCustomizeHUD", self, self.CustomizeHUD) self.StaticStats = false end function SWEP:RemoveCustomizeHUD() if self.CustomizeHUD then self.CustomizeHUD:Remove() if (self.GrenadeMenuAlpha or 0) != 1 and (self.BlindFireMenuAlpha or 0) != 1 then gui.EnableScreenClicker(false) TacRP.CursorEnabled = false end self.LastHintLife = CurTime() end end function SWEP:DrawCustomizeHUD() local customize = self:GetCustomize() if customize and !lastcustomize then self:CreateCustomizeHUD() elseif !customize and lastcustomize then self:RemoveCustomizeHUD() end lastcustomize = self:GetCustomize() -- if self:GetCustomize() then -- customizedelta = math.Approach(customizedelta, 1, FrameTime() * 1 / 0.25) -- else -- customizedelta = math.Approach(customizedelta, 0, FrameTime() * 1 / 0.25) -- end -- local curvedcustomizedelta = self:Curve(customizedelta) -- if curvedcustomizedelta > 0 then -- RunConsoleCommand("pp_bokeh", "1") -- else -- RunConsoleCommand("pp_bokeh", "0") -- end -- RunConsoleCommand("pp_bokeh_blur", tostring(curvedcustomizedelta * 5)) -- RunConsoleCommand("pp_bokeh_distance", 0) -- RunConsoleCommand("pp_bokeh_focus", tostring(((1 - curvedcustomizedelta) * 11) + 1)) end