Files
VnUtest/garrysmod/addons/tacrp/lua/weapons/tacrp_base/cl_customize.lua
2026-03-31 10:27:04 +03:00

1443 lines
57 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 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