Advertisement
Guest User

halp

a guest
May 23rd, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.53 KB | None | 0 0
  1. ------------------ Jobs panel
  2. local PANEL = {}
  3.  
  4. function PANEL:Init()
  5.     self:Dock(FILL)
  6.  
  7.     self.Num = 1
  8.  
  9.     self.Contents = {}
  10.     self.Categories = {}
  11. end
  12.  
  13. function PANEL:SetContents(contents)
  14.     self.Contents = contents
  15.     self:Populate()
  16. end
  17.  
  18. function PANEL:Populate()
  19.     local wide, height = ScrW()*0.8 - 220, ScrH()*0.8 - 55
  20.     if self.Contents[1].name == team.GetName(LocalPlayer():Team()) then
  21.         self.Selected = self.Contents[2]
  22.     else
  23.         self.Selected = self.Contents[1]
  24.     end
  25.  
  26.     self.Preview = vgui.Create("DPanel", self)
  27.     self.Preview:Dock(RIGHT)
  28.     self.Preview:SetWide((wide*0.33) - 15) --thank mr scrollbar
  29.     self.Preview.Paint = function(this, w, h)
  30.         draw.RoundedBox(0, 0, 0, w, h, Color(41, 41, 41, 255))
  31.         draw.RoundedBox(4, 5, 5, w-10, height*0.4, Color(65, 65, 65 , 255))
  32.     end
  33.  
  34.     self.Preview.Model = vgui.Create("DModelPanel", self.Preview)
  35.     self.Preview.Model:Dock(TOP)
  36.     self.Preview.Model:SetSize(self.Preview:GetWide(), height*0.4)
  37.     self.Preview.Model:SetCamPos(Vector(55, 45, 55))
  38.     self.Preview.Model:SetFOV(70)
  39.     self.Preview.Model.OnCursorEntered  = function() return end
  40.     self.Preview.Model.OnCursorExited   = function() return end
  41.     self.Preview.Model.DoClick          = function() return end
  42.     self.Preview.Model.LayoutEntity     = function(ent) ent:RunAnimation() end
  43.  
  44.     self.Preview.Title = vgui.Create("DLabel", self.Preview)
  45.     self.Preview.Title:Dock(TOP)
  46.     self.Preview.Title:DockMargin(5, 12, 5, 5)
  47.     self.Preview.Title:SetTall(32)
  48.     self.Preview.Title:SetFont("aMenuJob")
  49.     self.Preview.Title:SetContentAlignment(8)
  50.     self.Preview.Title.Paint = function(this, w, h)
  51.         draw.RoundedBox(4, 0, 0, w, h, Color(65, 65, 65, 255))
  52.         draw.RoundedBox(2, 4, h-4, w-8, 2, aMenu.Color)
  53.     end
  54.     self.Preview.Title.PerformLayout = function()
  55.         self.Preview.Title:SetText(self.Selected.name)
  56.     end
  57.  
  58.     self.Preview.Description = vgui.Create("DScrollPanel", self.Preview)
  59.     self.Preview.Description:Dock(TOP)
  60.     self.Preview.Description:DockMargin(5, 0, 5, 5)
  61.     self.Preview.Description:SetTall(height*0.4)
  62.     self.Preview.Description.Paint = function(this, w, h)
  63.         draw.RoundedBox(4, 0, 0, w, h, Color(65, 65, 65, 255))
  64.     end
  65.  
  66.     self.Preview.Description.Text = vgui.Create("DLabel", self.Preview.Description)
  67.     self.Preview.Description.Text:Dock(TOP)
  68.     self.Preview.Description.Text:DockMargin(5, 5, 5, 5)
  69.     self.Preview.Description.Text:SetTall(height*0.4)
  70.     self.Preview.Description.Text:SetFont("aMenu18")
  71.     self.Preview.Description.Text:SetWrap(true)
  72.     self.Preview.Description.Text:SetContentAlignment(8)
  73.     self.Preview.Description.Text.PerformLayout = function()
  74.         local text = ""
  75.  
  76.         if self.Selected.weapons and self.Selected.weapons[1] and aMenu.DisplayWeapons then
  77.             --functions for getting the weapon names from the job table from the original DarkRP F4 menu
  78.             local getWepName = fn.FOr{fn.FAnd{weapons.Get, fn.Compose{fn.Curry(fn.GetValue, 2)("PrintName"), weapons.Get}}, fn.Id}
  79.             local getWeaponNames = fn.Curry(fn.Map, 2)(getWepName)
  80.             local weaponString = fn.Compose{fn.Curry(fn.Flip(table.concat), 2)("\n"), fn.Curry(fn.Seq, 2)(table.sort), getWeaponNames, table.Copy}
  81.  
  82.             self.Preview.Description.Text:SetText(self.Selected.description .. "\n\n Additional Equipment: \n" .. weaponString(self.Selected.weapons))
  83.         else
  84.             self.Preview.Description.Text:SetText(self.Selected.description)
  85.         end
  86.  
  87.         self.Preview.Description:SizeToContents()
  88.     end
  89.  
  90.     self.Preview.Control = vgui.Create("DPanel", self.Preview)
  91.     self.Preview.Control:Dock(FILL)
  92.     self.Preview.Control:DockMargin(5, 0, 5, 5)
  93.     self.Preview.Control.Paint = function(this, w, h)
  94.         draw.RoundedBox(4, 0, 0, w, h, Color(65, 65, 65, 255))
  95.     end
  96.  
  97.     self.Preview.Control.Left = vgui.Create("aMenuButton", self.Preview.Control)
  98.     self.Preview.Control.Left:Dock(LEFT)
  99.     self.Preview.Control.Left.Text = "<"
  100.     self.Preview.Control.Left:DockMargin(5, 5, 5, 5)
  101.     self.Preview.Control.Left:SetWide(self.Preview:GetWide()*0.15 - 10)
  102.     self.Preview.Control.Left.DoClick = function()
  103.         self.Num = self.Num - 1
  104.         if self.Num < 1 then self.Num = 1 end
  105.         if self.Num == #self.Selected.model then return end
  106.         self.Preview.Model:SetModel(self.Selected.model[self.Num])
  107.         self.Preview.Model:InvalidateLayout()
  108.     end
  109.  
  110.     self.Preview.Control.Click = vgui.Create("aMenuButton", self.Preview.Control)
  111.     self.Preview.Control.Click:Dock(LEFT)
  112.     self.Preview.Control.Click:DockMargin(0, 5, 0, 5)
  113.     self.Preview.Control.Click:SetWide(self.Preview:GetWide()*0.7 - 10)
  114.     self.Preview.Control.Click.DoClick = function()
  115.         DarkRP.setPreferredJobModel(self.Selected.team, self.Preview.Model:GetModel())
  116.         print(self.Selected.RequiresVote)
  117.         if self.Selected.vote or self.Selected.RequiresVote(LocalPlayer()) then
  118.             RunConsoleCommand("darkrp", "vote"..self.Selected.command)
  119.         else
  120.             RunConsoleCommand("darkrp", self.Selected.command)
  121.         end
  122.        
  123.         DarkRP.closeF4Menu()
  124.     end
  125.  
  126.     self.Preview.Control.Right = vgui.Create("aMenuButton", self.Preview.Control)
  127.     self.Preview.Control.Right:Dock(LEFT)
  128.     self.Preview.Control.Right.Text = ">"
  129.     self.Preview.Control.Right:DockMargin(5, 5, 5, 5)
  130.     self.Preview.Control.Right:SetWide(self.Preview:GetWide()*0.15 - 10)
  131.     self.Preview.Control.Right.DoClick = function()
  132.         if self.Num == #self.Selected.model then return end
  133.         self.Num = self.Num + 1
  134.         self.Preview.Model:SetModel(self.Selected.model[self.Num])
  135.         self.Preview.Model:InvalidateLayout()
  136.     end
  137.  
  138.     self.Preview.Model.PerformLayout = function() --Putting this shit down here because I hate docking
  139.         if istable(self.Selected.model) then
  140.             self.Preview.Model:SetModel(self.Selected.model[self.Num])
  141.         else
  142.             self.Preview.Model:SetModel(self.Selected.model)
  143.         end
  144.  
  145.         if aMenu.PreviewThemeColour then
  146.             self.Preview.Model.Entity.GetPlayerColor = function() --and putting this in here to stop shit breaking
  147.                 return Vector(aMenu.Color.r/255, aMenu.Color.g/255, aMenu.Color.b/255)
  148.             end
  149.         end
  150.  
  151.         if self.Selected.vote == true or (self.Selected.RequiresVote and self.Selected.RequiresVote(LocalPlayer())) then
  152.             self.Preview.Control.Click.Text = "Become Job"
  153.             self.Preview.Control.Click.DoClick = function()
  154.                 DarkRP.setPreferredJobModel(self.Selected.team, self.Preview.Model:GetModel())
  155.                 RunConsoleCommand("darkrp", "vote"..self.Selected.command)
  156.                 DarkRP.closeF4Menu()
  157.             end
  158.         else
  159.             self.Preview.Control.Click.Text = "Become Job"
  160.             self.Preview.Control.Click.DoClick = function()
  161.                 DarkRP.setPreferredJobModel(self.Selected.team, self.Preview.Model:GetModel())
  162.                 RunConsoleCommand("darkrp", self.Selected.command)
  163.                 DarkRP.closeF4Menu()
  164.             end
  165.         end
  166.  
  167.         self.Preview.Control.Right.Disabled = true
  168.         self.Preview.Control.Left.Disabled  = true
  169.         if istable(self.Selected.model) then
  170.             if #self.Selected.model != 1 then
  171.                 self.Preview.Control.Right.Disabled = false
  172.                 self.Preview.Control.Left.Disabled  = false
  173.             end
  174.         end
  175.     end
  176.  
  177.     self.List = vgui.Create("DScrollPanel", self)
  178.     self.List:Dock(FILL)
  179.     self.List:SetWide(self:GetWide()*0.66)
  180.     self.List.Paint = function(this, w, h)
  181.         draw.RoundedBox(0, 0, 0, w, h, Color(62, 62, 62, 255))
  182.     end
  183.     aMenu.PaintScroll(self.List)
  184.  
  185.     for k, v in pairs(self.Contents) do
  186.  
  187.         if v.name == team.GetName(LocalPlayer():Team()) then continue end
  188.  
  189.         if v.NeedToChangeFrom then
  190.             if type(v.NeedToChangeFrom) == "number" then
  191.                 if v.NeedToChangeFrom != LocalPlayer():Team() then continue end
  192.             elseif type(v.NeedToChangeFrom) == "table" then
  193.                 local found = false
  194.                 for _, e in pairs(v.NeedToChangeFrom) do
  195.                     if e == LocalPlayer():Team() then
  196.                         found = true
  197.                     end
  198.                 end
  199.  
  200.                 if not found then
  201.                     continue
  202.                 end
  203.             end
  204.         end
  205.  
  206.         if not aMenu.ShowVIP then
  207.             if v.customCheck and not v.customCheck(LocalPlayer()) then
  208.                 continue
  209.             end
  210.         end
  211.         --if v.customCheck then if not v.customCheck(LocalPlayer()) then continue end end
  212.  
  213.  
  214.         local category
  215.         if v.category then
  216.             category = self:CreateNewCategory(v.category, self.List)
  217.         else
  218.             category = self:CreateNewCategory("Unassigned", self.List)
  219.         end
  220.  
  221.         v.Bar = vgui.Create("DPanel", category)
  222.         v.Bar.Max = v.max
  223.         v.Bar.Cur = #team.GetPlayers(v.team)
  224.         v.Bar.BackAlpha = 0
  225.  
  226.         if v.Bar.Max == 0 then v.Bar.Max = "∞" end
  227.         local todraw = math.Min(v.Bar.Cur / v.max, 1)
  228.  
  229.         v.Bar.Paint = function(this, w, h)
  230.             draw.RoundedBox(4, 0, 0, w, h, Color(41, 41, 41, 255))
  231.             draw.RoundedBox(4, 0, 0, w, h, Color(aMenu.Color.r,aMenu.Color.g, aMenu.Color.b, v.Bar.BackAlpha))
  232.  
  233.             surface.SetFont("aMenuSubTitle")
  234.  
  235.             local sw, sh = surface.GetTextSize(string.upper(v.name))
  236.  
  237.             draw.SimpleText(v.name, "aMenuSubTitle", 70, 1, Color(210, 210, 210), TEXT_ALIGN_LEFT, TEXT_ALIGN_TOP)
  238.             draw.RoundedBox(2, 70, 25, sw + 10, 2, aMenu.Color)
  239.        
  240.             draw.RoundedBox(4, w-65, h/2-30, 60, 60, aMenu.Color)
  241.             draw.SimpleText(DarkRP.formatMoney(v.salary), "aMenuSubTitle", w-35, h/2, Color(210, 210, 210), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
  242.    
  243.             draw.RoundedBox(4, 5, 5, 60, 60, Color(62, 62, 62, 255))
  244.  
  245.             draw.RoundedBox(4, 70, h-27, w-140, 22, Color(62, 62, 62, 255))
  246.             if v.Bar.Cur != 0 then
  247.                 draw.RoundedBox(4, 72, h-25, (w-144) * todraw, 18, aMenu.Color)
  248.             end
  249.             draw.SimpleText(v.Bar.Cur .. "/" .. v.Bar.Max, "aMenu19", w/2, h-17, Color(210, 210, 210), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
  250.  
  251.  
  252.         end
  253.  
  254.         v.Bar.Model = vgui.Create("DModelPanel", v.Bar)
  255.         v.Bar.Model.LayoutEntity = function() return end
  256.         if istable(v.model) then
  257.             v.Bar.Model:SetModel(v.model[1])
  258.         else
  259.             v.Bar.Model:SetModel(v.model)
  260.         end
  261.         v.Bar.Model:SetPos(5, 5)
  262.         v.Bar.Model:SetSize(60, 60)
  263.         v.Bar.Model:SetFOV(37)
  264.         v.Bar.Model:SetCamPos(Vector(25, -7, 65))
  265.         v.Bar.Model:SetLookAt(Vector(0, 0, 65))
  266.         v.Bar.Model.PaintOver = function(this, w, h)
  267.             if LevelSystemConfiguration and v.level then
  268.                 if v.level > LocalPlayer():getDarkRPVar("level") then
  269.                     draw.RoundedBox(2, 0, h-10, w, 10, aMenu.LevelDenyColor)
  270.                 else   
  271.                     draw.RoundedBox(2, 0, h-10, w, 10, aMenu.LevelAcceptColor)
  272.                 end            
  273.                 draw.SimpleText(v.level, "aMenu14", w/2, h-6, Color(210, 210, 210), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
  274.             end
  275.         end
  276.         if IsValid(v.Bar.Model.Entity) then
  277.             v.Bar.Model.Entity.GetPlayerColor = function()
  278.                 return Vector(aMenu.Color.r/255, aMenu.Color.g/255, aMenu.Color.b/255)
  279.             end
  280.         end
  281.  
  282.         v.Bar.Button = vgui.Create("DButton", v.Bar)
  283.         v.Bar.Button:Dock(FILL)
  284.         v.Bar.Button:SetText("")
  285.         v.Bar.Button.Paint = function() end
  286.         v.Bar.Button.DoClick = function()
  287.             self.Selected = v
  288.             self.Num = 1
  289.             self.Preview.Model:InvalidateLayout()
  290.         end
  291.         v.Bar.Button.DoDoubleClick = function()
  292.             self.Preview.Control.Click.DoClick()
  293.         end
  294.  
  295.         category:AddChild(v.Bar)
  296.     end
  297. end
  298.  
  299. function PANEL:CreateNewCategory(Name, parent)
  300.  
  301.     for k, v in pairs(self.Categories) do
  302.         if v:GetName() == Name then
  303.             return v
  304.         end
  305.     end
  306.  
  307.     category = vgui.Create("aMenuCategory", parent)
  308.     category:SetName(Name)
  309.  
  310.     table.insert(self.Categories, category)
  311.  
  312.     if aMenu.SortOrder then
  313.         for k, v in pairs(self.Categories) do
  314.             for i, _ in pairs (DarkRP.getCategories().jobs) do
  315.                 if v.Name == _.name then
  316.                     v.sortOrder = _.sortOrder
  317.                 end    
  318.             end
  319.         end
  320.  
  321.         --table.SortByMember(self.Categories, "sortOrder", true)
  322.         table.sort(self.Categories, function(a, b)
  323.             if a and a.sortOrder then
  324.                 if b and b.sortOrder then
  325.                     return a.sortOrder < b.sortOrder
  326.                 end
  327.             end
  328.             return false
  329.         end)
  330.  
  331.         local n = vgui.Create("DPanel", self)
  332.         for k, v in ipairs(self.Categories) do
  333.             v:SetParent(n)
  334.         end
  335.  
  336.         for k, v in ipairs(self.Categories) do
  337.             v:SetParent(self.List)
  338.             v:Dock(TOP)
  339.         end
  340.  
  341.         n:Remove()
  342.     end
  343.  
  344.     return category
  345. end
  346.  
  347. vgui.Register("aMenuContainer", PANEL, "DPanel")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement