SHARE
TWEET

Untitled

a guest Nov 19th, 2019 96 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local PANEL = {}
  2.     local paintFunctions = {}
  3.     paintFunctions[0] = function(this, w, h)
  4.         surface.SetDrawColor(0, 0, 0, 50)
  5.         surface.DrawRect(0, 0, w, h)
  6.     end
  7.     paintFunctions[1] = function(this, w, h)
  8.     end
  9.  
  10.     function PANEL:Init()
  11.         if (IsValid(nut.gui.score)) then
  12.             nut.gui.score:Remove()
  13.         end
  14.  
  15.         nut.gui.score = self
  16.  
  17.         self:SetSize(ScrW() * nut.config.get("sbWidth"), ScrH() * nut.config.get("sbHeight"))
  18.         self:Center()
  19.  
  20.         self.title = self:Add("DLabel")
  21.         self.title:SetText(GetHostName())
  22.         self.title:SetFont("nutBigFont")
  23.         self.title:SetContentAlignment(5)
  24.         self.title:SetTextColor(color_white)
  25.         self.title:SetExpensiveShadow(1, color_black)
  26.         self.title:Dock(TOP)
  27.         self.title:SizeToContentsY()
  28.         self.title:SetTall(self.title:GetTall() + 16)
  29.         self.title.Paint = function(this, w, h)
  30.             surface.SetDrawColor(0, 0, 0, 150)
  31.             surface.DrawRect(0, 0, w, h)
  32.         end
  33.  
  34.         self.scroll = self:Add("DScrollPanel")
  35.         self.scroll:Dock(FILL)
  36.         self.scroll:DockMargin(1, 0, 1, 0)
  37.         self.scroll.VBar:SetWide(0)
  38.  
  39.         self.layout = self.scroll:Add("DListLayout")
  40.         self.layout:Dock(TOP)
  41.  
  42.         self.teams = {}
  43.         self.slots = {}
  44.         self.i = {}
  45.  
  46.         for k, v in ipairs(nut.faction.indices) do
  47.             local color = team.GetColor(k)
  48.             local r, g, b = color.r, color.g, color.b
  49.  
  50.             local list = self.layout:Add("DListLayout")
  51.             list:Dock(TOP)
  52.             list:SetTall(28)
  53.             list.Think = function(this)
  54.                 for k2, v2 in ipairs(team.GetPlayers(k)) do
  55.                     if (!IsValid(v2.nutScoreSlot) or v2.nutScoreSlot:GetParent() != this) then
  56.                         if (IsValid(v2.nutPlayerSlot)) then
  57.                             v2.nutPlayerSlot:SetParent(this)
  58.                         else
  59.                             self:addPlayer(v2, this)
  60.                         end
  61.                     end
  62.                 end
  63.             end
  64.  
  65.             local header = list:Add("DLabel")
  66.             header:Dock(TOP)
  67.             header:SetText(L(v.name))
  68.             header:SetTextInset(3, 0)
  69.             header:SetFont("nutMediumFont")
  70.             header:SetTextColor(color_white)
  71.             header:SetExpensiveShadow(1, color_black)
  72.             header:SetTall(28)
  73.             header.Paint = function(this, w, h)
  74.                 surface.SetDrawColor(r, g, b, 20)
  75.                 surface.DrawRect(0, 0, w, h)
  76.             end
  77.  
  78.             self.teams[k] = list
  79.         end
  80.     end
  81.  
  82.     function PANEL:Think()
  83.         if ((self.nextUpdate or 0) < CurTime()) then
  84.             self.title:SetText(nut.config.get("sbTitle"))
  85.  
  86.             local visible, amount
  87.  
  88.             for k, v in ipairs(self.teams) do
  89.                 visible, amount = v:IsVisible(), team.NumPlayers(k)
  90.  
  91.                 if (visible and amount == 0) then
  92.                     v:SetVisible(false)
  93.                     self.layout:InvalidateLayout()
  94.                 elseif (!visible and amount > 0) then
  95.                     v:SetVisible(true)
  96.                 end
  97.             end
  98.  
  99.             for k, v in pairs(self.slots) do
  100.                 if (IsValid(v)) then
  101.                     v:update()
  102.                 end
  103.             end
  104.  
  105.             self.nextUpdate = CurTime() + 0.1
  106.         end
  107.     end
  108.  
  109.     function PANEL:addPlayer(client, parent)
  110.         if (!client:getChar() or !IsValid(parent)) then
  111.             return
  112.         end
  113.  
  114.         local slot = parent:Add("DPanel")
  115.         slot:Dock(TOP)
  116.         slot:SetTall(64)
  117.         slot:DockMargin(0, 0, 0, 1)
  118.         slot.character = client:getChar()
  119.  
  120.         client.nutScoreSlot = slot
  121.  
  122.         slot.model = slot:Add("nutSpawnIcon")
  123.         slot.model:SetModel(client:GetModel(), client:GetSkin())
  124.         slot.model:SetSize(64, 64)
  125.         slot.model.DoClick = function()
  126.             local menu = DermaMenu()
  127.                 local options = {}
  128.  
  129.                 hook.Run("ShowPlayerOptions", client, options)
  130.  
  131.                 if (table.Count(options) > 0) then
  132.                     for k, v in SortedPairs(options) do
  133.                         menu:AddOption(L(k), v[2]):SetImage(v[1])
  134.                     end
  135.                 end
  136.             menu:Open()
  137.  
  138.             RegisterDermaMenuForClose(menu)
  139.         end
  140.         slot.model:SetToolTip(L("sbOptions", client:steamName()))
  141.  
  142.         timer.Simple(0, function()
  143.             if (!IsValid(slot)) then
  144.                 return
  145.             end
  146.  
  147.             local entity = slot.model.Entity
  148.  
  149.             if (IsValid(entity)) then
  150.                 for k, v in ipairs(client:GetBodyGroups()) do
  151.                     entity:SetBodygroup(v.id, client:GetBodygroup(v.id))
  152.                 end
  153.  
  154.                 for k, v in ipairs(client:GetMaterials()) do
  155.                     entity:SetSubMaterial(k - 1, client:GetSubMaterial(k - 1))
  156.                 end
  157.             end
  158.         end)
  159.  
  160.         slot.name = slot:Add("DLabel")
  161.         slot.name:SetText(client:Name())
  162.         slot.name:Dock(TOP)
  163.         slot.name:DockMargin(65, 0, 48, 0)
  164.         slot.name:SetTall(18)
  165.         slot.name:SetFont("nutGenericFont")
  166.         slot.name:SetTextColor(color_white)
  167.         slot.name:SetExpensiveShadow(1, color_black)
  168.  
  169.         slot.ping = slot:Add("DLabel")
  170.         slot.ping:SetPos(self:GetWide() - 48, 0)
  171.         slot.ping:SetSize(48, 64)
  172.         slot.ping:SetText("0")
  173.         slot.ping.Think = function(this)
  174.             if (IsValid(client)) then
  175.                 this:SetText(client:Ping())
  176.             end
  177.         end
  178.         slot.ping:SetFont("nutGenericFont")
  179.         slot.ping:SetContentAlignment(6)
  180.         slot.ping:SetTextColor(color_white)
  181.         slot.ping:SetTextInset(16, 0)
  182.         slot.ping:SetExpensiveShadow(1, color_black)
  183.  
  184.         slot.desc = slot:Add("DLabel")
  185.         slot.desc:Dock(FILL)
  186.         slot.desc:DockMargin(65, 0, 48, 0)
  187.         slot.desc:SetWrap(true)
  188.         slot.desc:SetContentAlignment(7)
  189.                 slot.desc:SetText("")
  190.         slot.desc:SetTextColor(color_white)
  191.         slot.desc:SetExpensiveShadow(1, Color(0, 0, 0, 100))
  192.         slot.desc:SetFont("nutSmallFont")
  193.  
  194.         local oldTeam = client:Team()
  195.  
  196.         function slot:update()
  197.             if (!IsValid(client) or !client:getChar() or !self.character or self.character != client:getChar() or oldTeam != client:Team()) then
  198.                 self:Remove()
  199.  
  200.                 local i = 0
  201.  
  202.                 for k, v in ipairs(parent:GetChildren()) do
  203.                     if (IsValid(v.model) and v != self) then
  204.                         i = i + 1
  205.                         v.Paint = paintFunctions[i % 2]
  206.                     end
  207.                 end
  208.  
  209.                 return
  210.             end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top