ocal eqframe = nil
local function TraitorMenuPopup()
local ply = LocalPlayer()
if not IsValid(ply) or not ply:IsActiveSpecial() then
return
end
-- Close any existing traitor menu
if eqframe and ValidPanel(eqframe) then eqframe:Close() end
local credits = ply:GetCredits()
local can_order = credits > 0
local dframe = vgui.Create("DFrame")
local w, h = 600, 450
dframe:SetSize(w, h)
dframe:Center()
dframe:SetTitle(GetTranslation("equip_title"))
dframe:SetVisible(true)
dframe:ShowCloseButton(true)
dframe:SetMouseInputEnabled(true)
dframe:SetDeleteOnClose(true)
local m = 5
local dsheet = vgui.Create("DPropertySheet", dframe)
-- Add a callback when switching tabs
local oldfunc = dsheet.SetActiveTab
dsheet.SetActiveTab = function(self, new)
if self.m_pActiveTab != new and self.OnTabChanged then
self:OnTabChanged(self.m_pActiveTab, new)
end
oldfunc(self, new)
end
dsheet:SetPos(0,0)
dsheet:StretchToParent(m,m + 25,m,m)
local padding = dsheet:GetPadding()
local dequip = vgui.Create("DPanel", dsheet)
dequip:SetPaintBackground(false)
dequip:StretchToParent(padding,padding,padding,padding)
-- Determine if we already have equipment
local owned_ids = {}
for _, wep in pairs(ply:GetWeapons()) do
if IsValid(wep) and wep:IsEquipment() then
table.insert(owned_ids, wep:GetClass())
end
end
-- Stick to one value for no equipment
if #owned_ids == 0 then
owned_ids = nil
end
--- Construct icon listing
local dlist = vgui.Create("EquipSelect", dequip)
dlist:SetPos(0,0)
dlist:SetSize(210, h - 114)
dlist:EnableVerticalScrollbar(true)
dlist:EnableHorizontal(true)
dlist:SetPadding(4)
local items = GetEquipmentForRole(ply:GetRole())
local to_select = nil
for k, item in pairs(items) do
local ic = nil
-- Create icon panel
if item.material then
if item.custom then
-- Custom marker icon
ic = vgui.Create("LayeredIcon", dlist)
local marker = vgui.Create("DImage")
marker:SetImage("vgui/ttt/custom_marker")
marker.PerformLayout = function(s)
s:AlignBottom(2)
s:AlignRight(2)
s:SetSize(16, 16)
end
marker:SetTooltip(GetTranslation("equip_custom"))
ic:AddLayer(marker)
ic:EnableMousePassthrough(marker)
elseif not ItemIsWeapon(item) then
ic = vgui.Create("SimpleIcon", dlist)
else
ic = vgui.Create("LayeredIcon", dlist)
end
-- Slot marker icon
if ItemIsWeapon(item) then
local slot = vgui.Create("SimpleIconLabelled")
slot:SetIcon("vgui/ttt/slotcap")
slot:SetIconColor(color_slot[ply:GetRole()] or COLOR_GREY)
slot:SetIconSize(16)
slot:SetIconText(item.slot)
slot:SetIconProperties(COLOR_WHITE,
"DefaultBold",
{opacity=220, offset=1},
{10, 8})
ic:AddLayer(slot)
ic:EnableMousePassthrough(slot)
end
ic:SetIconSize(64)
ic:SetIcon(item.material)
elseif item.model then
ic = vgui.Create("SpawnIcon", dlist)
ic:SetModel(item.model)
else
ErrorNoHalt("Equipment item does not have model or material specified: " .. tostring(item) .. "\n")
end
ic.item = item
local tip = SafeTranslate(item.name) .. " (" .. SafeTranslate(item.type) .. ")"
ic:SetTooltip(tip)
-- If we cannot order this item, darken it
if ((not can_order) or
-- already owned
table.HasValue(owned_ids, item.id) or
(tonumber(item.id) and ply:HasEquipmentItem(tonumber(item.id))) or
-- already carrying a weapon for this slot
(ItemIsWeapon(item) and (not CanCarryWeapon(item))) or
-- already bought the item before
(item.limited and ply:HasBought(tostring(item.id)))) then
ic:SetIconColor(color_darkened)
end
dlist:AddPanel(ic)
end
local dlistw = 154
local bw, bh = 100, 25
local dih = h - bh - m*5
local diw = w - dlistw - m*6 - 2
local dinfobg = vgui.Create("DPanel", dequip)
dinfobg:SetPaintBackground(false)
dinfobg:SetSize(diw, dih)
dinfobg:SetPos(dlistw + m, 0)
local dinfo = vgui.Create("ColoredBox", dinfobg)
dinfo:SetColor(Color(90, 90, 95))
dinfo:SetPos(0,0)
dinfo:StretchToParent(0, 0, 0, dih - 135)
local dfields = {}
for _, k in pairs({"name", "type", "desc"}) do
dfields[k] = vgui.Create("DLabel", dinfo)
dfields[k]:SetTooltip(GetTranslation("equip_spec_" .. k))
dfields[k]:SetPos(m*3, m*2)
end
dfields.name:SetFont("TabLarge")
dfields.type:SetFont("DermaDefault")
dfields.type:MoveBelow(dfields.name)
dfields.desc:SetFont("DermaDefaultBold")
dfields.desc:SetContentAlignment(7)
dfields.desc:MoveBelow(dfields.type, 1)
local iw, ih = dinfo:GetSize()
local dhelp = vgui.Create("ColoredBox", dinfobg)
dhelp:SetColor(Color(90, 90, 95))
dhelp:SetSize(diw, dih - 205)
dhelp:MoveBelow(dinfo, m)
local update_preqs = PreqLabels(dhelp, m*3, m*2)
dhelp:SizeToContents()
local dconfirm = vgui.Create("DButton", dinfobg)
dconfirm:SetPos(0, dih - bh*2)
dconfirm:SetSize(bw, bh)
dconfirm:SetDisabled(true)
dconfirm:SetText(GetTranslation("equip_confirm"))
dsheet:AddSheet(GetTranslation("equip_tabtitle"), dequip, "icon16/bomb.png", false, false, "Traitor equipment menu")