Advertisement
CREONIX

[LEAK] DARKRP F4 MENU | CAKE RP

Jan 14th, 2019
1,158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 34.32 KB | None | 0 0
  1.  
  2. local FAdmin = FAdmin or FAdminPort
  3. F4 = F4 or {}
  4.  
  5. if IsValid( F4.MenuFrame ) then
  6.     F4.MenuFrame:Remove()
  7.     F4.ToggleMenu()
  8. end
  9.  
  10. do
  11.     local PANEL = {}
  12.  
  13.     AccessorFunc( PANEL, '_hdr', 'TabHolder' )
  14.     AccessorFunc( PANEL, '_pnl', 'Panel' )
  15.  
  16.     function PANEL:Init()
  17.         self:Dock(TOP)
  18.         self:DockMargin(0,0,0,1)
  19.         self:SetTall(40)
  20.         self:SetFont( 'GModNotify' )
  21.         self:SetColor(Color(255,255,255))
  22.     end
  23.  
  24.     function PANEL:Paint( w, h )
  25.         draw.RoundedBox( 0, 0, 0, w, h, Color(80,80,80,255) )
  26.     end
  27.  
  28.     function PANEL:PaintOver( w, h )
  29.         if IsValid( self:GetTabHolder() ) and self:GetTabHolder():GetParent():GetActiveTab() == self then
  30.             draw.RoundedBox( 0, 0, 0, w, h, Color(255,255,255,10) )
  31.             draw.RoundedBox( 0, w-2, 0, 2, h, Color(19, 144, 20) )
  32.         end
  33.     end
  34.  
  35.     function PANEL:DoClick()
  36.         if IsValid( self:GetTabHolder() ) then
  37.             self:GetTabHolder():GetParent():SetTab( self )
  38.         end
  39.     end
  40.  
  41.     vgui.Register( 'F4MenuTab', PANEL, 'DButton' )
  42. end
  43.  
  44. do
  45.  
  46.     local PANEL = {}
  47.  
  48.     function PANEL:Init()
  49.  
  50.         local w = math.Clamp( ScrW() * 0.7, 800, ScrW() )
  51.         local h = math.Clamp( ScrH() * 0.68, 600, ScrH() )
  52.  
  53.         self:SetSize( w, h )
  54.         self:Center()
  55.         self:MakePopup()
  56.         self:SetDraggable(false)
  57.         self:SetTitle( '' )
  58.  
  59.         self.btnMinim:SetVisible( false )
  60.         self.btnMaxim:SetVisible( false )
  61.  
  62.         self.Items = {}
  63.  
  64.         self:DockPadding( 2, 24, 2, 2 )
  65.  
  66.         self.Tabholder = self:Add( "DScrollPanel" )
  67.         self.Tabholder:Dock( LEFT )
  68.         self.Tabholder:SetWide(150)
  69.  
  70.         self.TabSheet = self:Add( 'EditablePanel' )
  71.         self.TabSheet:Dock( FILL )
  72.         self.TabSheet:DockMargin(2,0,0,0)
  73.  
  74.         self.TabSheet.Think = function(sheet)
  75.             if sheet.ActivePanel and IsValid( sheet.ActivePanel ) then
  76.                 sheet.ActivePanel:SetSize( sheet:GetSize() )
  77.             end
  78.         end
  79.  
  80.         self.OpenCT = CurTime() + 0.2
  81.  
  82.         self.btnClose:MoveToFront()
  83.     end
  84.  
  85.     function PANEL:Paint( w, h )
  86.         draw.RoundedBox( 0, 0, 0, w, h, Color( 60, 60, 60, 255*0.9 ) )
  87.         if input.IsKeyDown( KEY_F4 ) and CurTime() > self.OpenCT then
  88.             self:Close()
  89.         end
  90.     end
  91.  
  92.     function PANEL:GetActiveTab()
  93.         return self.ActiveTab
  94.     end
  95.  
  96.     function PANEL:SetTab( TabPanel )
  97.         if IsValid( self:GetActiveTab() ) and IsValid( self:GetActiveTab():GetPanel() ) then
  98.             self:GetActiveTab():GetPanel():SetVisible( false )
  99.         end
  100.  
  101.         self.ActiveTab = TabPanel
  102.  
  103.         local npanel = self:GetActiveTab():GetPanel()
  104.         if IsValid( npanel ) then
  105.             npanel:SetVisible(true)
  106.             npanel:SetSize( npanel:GetParent():GetSize() )
  107.             npanel:MoveToFront()
  108.             if npanel.OnSwitchedTo then npanel.OnSwitchedTo( npanel ) end
  109.             self.TabSheet.ActivePanel = npanel
  110.         end
  111.     end
  112.  
  113.     function PANEL:AddTab( name, panel )
  114.         local tab = self.Tabholder:Add( "F4MenuTab" )
  115.         tab:SetPanel( panel )
  116.         tab:SetTabHolder( self.Tabholder )
  117.         tab:SetText( name )
  118.  
  119.         self.Items[ name ] = { tab, panel }
  120.         panel:SetParent( self.TabSheet )
  121.         if self:GetActiveTab() ~= nil then
  122.             panel:SetVisible(false)
  123.         else
  124.             self:SetTab(tab)
  125.         end
  126.  
  127.         return self.Items[name]
  128.     end
  129.  
  130.     function PANEL:Close()
  131.         self:SetVisible(false)
  132.     end
  133.  
  134.     vgui.Register( 'F4MenuFrame', PANEL, 'DFrame' )
  135. end
  136.  
  137. do
  138.     local PANEL = {}
  139.  
  140.     function PANEL:Init()
  141.         local vbar = self.VBar
  142.  
  143.         vbar:SetWide(10)
  144.     end
  145.  
  146.     vgui.Register( 'DF4Scroll', PANEL, 'DScrollPanel' )
  147. end
  148.  
  149. local gradient = Material( 'gui/gradient' )
  150.  
  151. do
  152.     local PANEL = {}
  153.  
  154.     function PANEL:Init()
  155.         self:Dock(TOP)
  156.         self:SetTall(24)
  157.  
  158.         self.CatData = {
  159.             name = "Error",
  160.             color = Color(0,0,0)
  161.         }
  162.     end
  163.  
  164.     function PANEL:Paint(w,h)
  165.         draw.RoundedBox( 0, 0, 0, w, h, self.CatData.color)
  166.         draw.DrawText( self.CatData.name, "GModNotify", 2, 2, Color(255,255,255) )
  167.     end
  168.  
  169.     function PANEL:SetCategory(catID, catData)
  170.         self.CatData = catData
  171.     end
  172.  
  173.     vgui.Register( "F4JobCategorySplit", PANEL, "EditablePanel")
  174. end
  175.  
  176. do
  177.  
  178.     local function canGetJob(job)
  179.         local ply = LocalPlayer()
  180.  
  181.         if isnumber(job.NeedToChangeFrom) and ply:Team() ~= job.NeedToChangeFrom then return false, true end
  182.         if istable(job.NeedToChangeFrom) and not table.HasValue(job.NeedToChangeFrom, ply:Team()) then return false, true end
  183.         if job.customCheck and not job.customCheck(ply) then return false, true end
  184.         if ply:Team() == job.team then return false, true end
  185.         if job.max ~= 0 and ((job.max % 1 == 0 and team.NumPlayers(job.team) >= job.max) or (job.max % 1 ~= 0 and (team.NumPlayers(job.team) + 1) / #player.GetAll() > job.max)) then return false, false end
  186.         if job.admin == 1 and not ply:IsAdmin() then return false, true end
  187.         if job.admin > 1 and not ply:IsSuperAdmin() then return false, true end
  188.  
  189.  
  190.         return true
  191.     end
  192.  
  193.     local function getMaxOfTeam(job)
  194.         if not job.max or job.max == 0 then return "∞" end
  195.         if job.max % 1 == 0 then return tostring(job.max) end
  196.  
  197.         return tostring(math.floor(job.max * #player.GetAll()))
  198.     end
  199.  
  200.     local function reqvote(job)
  201.         return job.vote and (not job.RequiresVote or job.RequiresVote( LocalPlayer(), job.team ))
  202.     end
  203.  
  204.     local function become(job, model)
  205.         local vote = reqvote(job)
  206.         return function() if model then DarkRP.setPreferredJobModel(job.team or TEAM_CITIZEN, model or "") end if vote == true then RunConsoleCommand( 'darkrp', 'vote' .. job.command ) else RunConsoleCommand( 'darkrp', job.command ) end end
  207.     end
  208.  
  209.     local PANEL = {}
  210.  
  211.     function PANEL:Init()
  212.  
  213.         local actual_job
  214.  
  215.         self.JobPanel = self:Add("EditablePanel")
  216.         self.JobPanel:Dock( RIGHT )
  217.         self.JobPanel:DockMargin( 2, 0, 0, 0 )
  218.         self.JobPanel:SetWide(300)
  219.  
  220.         self.JobLabel = self.JobPanel:Add( "DLabel" )
  221.         self.JobLabel:Dock(TOP)
  222.         self.JobLabel:SetFont('GModNotify')
  223.         self.JobLabel:SetContentAlignment(5)
  224.  
  225.         self.BecomeButton = self.JobPanel:Add( "DButton" )
  226.         self.BecomeButton:Dock(BOTTOM)
  227.         self.BecomeButton:SetTall(28)
  228.         self.BecomeButton:SetText('Устроиться')
  229.         self.BecomeButton:SetFont( 'GModNotify')
  230.         self.BecomeButton:SetColor(Color(255,255,255))
  231.  
  232.         self.BecomeButton.Paint = function( self, w, h )
  233.             draw.RoundedBox( 6, 0, 0, w, h, Color(100,100,100))
  234.         end
  235.  
  236.         self.BecomeButton.DoClick = function()
  237.             if not actual_job then return end
  238.  
  239.             if istable( actual_job.model ) then
  240.                 local menu = vgui.Create('DFrame')
  241.                 menu:SetSize(400, 300)
  242.                 menu:SetTitle('ModelSelection')
  243.                 menu:Center()
  244.                 menu:MakePopup()
  245.                 menu:SetSkin('DarkRP')
  246.  
  247.                 local lst = menu:Add( "DScrollPanel" )
  248.                 lst:Dock(FILL)
  249.  
  250.                 local models = lst:Add( "DIconLayout" )
  251.                 models:Dock(FILL)
  252.                 models:SetSpaceX(2)
  253.                 models:SetSpaceY(2)
  254.  
  255.                 for k,v in pairs(actual_job.model) do
  256.                     local mdl = models:Add( 'SpawnIcon' )
  257.                     mdl:SetModel(v)
  258.                     mdl:SetSize(42,42)
  259.                     mdl.DoClick = function() become( actual_job, v )() menu:Close() end
  260.                 end
  261.  
  262.                 --error(1)
  263.             else
  264.                 pcall( become(actual_job) )
  265.             end
  266.  
  267.         end
  268.  
  269.         self.JobDescScroll = self.JobPanel:Add( "DF4Scroll" )
  270.         self.JobDescScroll:Dock(BOTTOM)
  271.         self.JobDescScroll:SetTall(200)
  272.         self.JobDescScroll.Paint = function(_,w,h)
  273.             draw.RoundedBox( 0, 0, 0, w, h, Color(80,80,80) )
  274.         end
  275.         self.JobDescScroll:DockMargin(0, 0, 0, 2)
  276.  
  277.         self.JobDesc = self.JobDescScroll:Add( "DLabel" )
  278.         self.JobDesc:SetPos(1,1)
  279.         self.JobDesc:SizeToContents()
  280.         self.JobDesc:SetContentAlignment(7)
  281.  
  282.         self.JobPreview = self.JobPanel:Add("DModelPanel")
  283.         self.JobPreview:Dock( FILL )
  284.         self.JobPreview:DockMargin( 2, 0, 0, 0 )
  285.  
  286.         self.JobPreview:SetCamPos(Vector(50,20,50))
  287.  
  288.         function self.JobPreview:LayoutEntity( Entity ) return end
  289.  
  290.         local function PlayPreviewAnimation( panel )
  291.  
  292.             if ( !panel or !IsValid( panel.Entity ) ) then return end
  293.  
  294.             local anims = { 'pose_standing_01', 'idle_all', 'pose_standing_02' }
  295.  
  296.             --PrintTable( panel.Entity:GetSequenceList() )
  297.  
  298.             local anim = table.Random(anims)
  299.  
  300.             local iSeq = panel.Entity:LookupSequence( anim )
  301.             if ( iSeq > 0 ) then panel.Entity:SetSequence( iSeq ) end
  302.  
  303.         end
  304.  
  305.         self.JobList = self:Add( "DF4Scroll" )
  306.         self.JobList:Dock( FILL )
  307.  
  308.         local function model( job )
  309.             return istable( job.model ) and table.Random(job.model) or job.model
  310.         end
  311.  
  312.         local function setjob( job )
  313.             self.JobPreview:SetModel( model(job) )
  314.             local ent = self.JobPreview:GetEntity()
  315.  
  316.             local mdl = self.JobPreview
  317.  
  318.             self.JobLabel:SetText( job.name )
  319.  
  320.             local desc = DarkRP.textWrap( job.description or "Нет описания", self.JobDesc:GetFont(), 298 )
  321.  
  322.             self.JobDesc:SetText( desc )
  323.             self.JobDesc:SizeToContents()
  324.  
  325.             self.BecomeButton:SetText( reqvote(job) == true and 'Создать голосование' or 'Устроиться')
  326.  
  327.             print(reqvote(job))
  328.  
  329.             self.JobDescScroll:SetTall( math.Clamp( self.JobDesc:GetTall(), 0, 200 ) + 2 )
  330.             timer.Simple( .1, function()
  331.                 if IsValid( self.JobPreview ) then PlayPreviewAnimation( self.JobPreview ) end
  332.             end)
  333.             actual_job = job
  334.         end
  335.  
  336.         local rad_lerp = 0
  337.  
  338.         for categoryName, cat in pairs( DarkRP.getCategories().jobs ) do
  339.             local category = self.JobList:Add("F4JobCategorySplit")
  340.             category:SetCategory(categoryName, cat)
  341.  
  342.             for jobID, jobTable in pairs( cat.members ) do
  343.                 local color = jobTable.color
  344.  
  345.                 local base = self.JobList:Add( "EditablePanel" )
  346.                 base:Dock(TOP)
  347.                 base:DockMargin(0,0,0,2)
  348.                 base:SetTall(55)
  349.                 base.Paint = function( self, w, h )
  350.                     draw.RoundedBox( 0, 0, 0, w, h, Color(80,80,80) )
  351.                     if self.Rad then
  352.                         surface.SetMaterial( gradient )
  353.                         surface.SetDrawColor( color.r, color.g, color.b, rad_lerp * 255)
  354.                         surface.DrawTexturedRect(0,0,400,h)
  355.  
  356.                         rad_lerp = Lerp( 0.03, rad_lerp, 1 )
  357.                     end
  358.                     draw.DrawText( jobTable.name, 'GModNotify', 65, 18, Color( 255,255,255 ))
  359.                     draw.DrawText( team.NumPlayers( jobTable.team ) .. '/' .. getMaxOfTeam( jobTable ), 'GModNotify', w - 10, 18, Color( 255,255,255 ),TEXT_ALIGN_RIGHT)
  360.  
  361.                     if not canGetJob(jobTable) then
  362.                         draw.RoundedBox( 0, 0, 0, w, h, Color(255,54,54,10))
  363.                     end
  364.                 end
  365.  
  366.                 local jobico = base:Add("SpawnIcon")
  367.                 jobico:Dock( LEFT )
  368.                 jobico:DockMargin(2,2,2,2)
  369.                 jobico:SetPos(2, 2)
  370.                 jobico:SetSize(51,51)
  371.                 jobico:SetModel( model(jobTable) )
  372.  
  373.                 local jobBtn = base:Add( "DButton" )
  374.                 jobBtn:Dock(FILL)
  375.                 jobBtn:SetText("")
  376.                 jobBtn.Paint = nil
  377.  
  378.                 jobBtn.OnCursorEntered = function(self)
  379.                     base.Rad = true
  380.                     rad_lerp = 0
  381.                 end
  382.  
  383.                 jobBtn.OnCursorExited = function(self)
  384.                     base.Rad = nil
  385.                     rad_lerp = 0
  386.                 end
  387.  
  388.                 jobBtn.DoClick = function()
  389.                     setjob(jobTable)
  390.                     surface.PlaySound("")
  391.                 end
  392.  
  393.                 if not actual_job then
  394.                     setjob(jobTable)
  395.                 end
  396.             end
  397.         end
  398.     end
  399.  
  400.     vgui.Register( 'F4Jobs', PANEL, 'EditablePanel' )
  401.  
  402. end
  403.  
  404. do
  405.     local buyFunction = function(data)
  406.         local name = data.name
  407.         return function()
  408.             RunConsoleCommand( "darkrp", "buyshipment", name )
  409.         end
  410.     end
  411.  
  412.     local buyWeapon = function(ent)
  413.         for k,v in pairs(CustomShipments) do
  414.             if v.entity == ent then
  415.                 return Derma_Query( "Вы действительно хотите купить " .. v.name .. "?", "Подтверждение покупки", string.format("Да (%s)", DarkRP.formatMoney(v.price)), buyFunction(v), "Нет", function() end )
  416.             end
  417.         end
  418.     end
  419.  
  420.     do
  421.         local PANEL = {}
  422.  
  423.         function PANEL:Init()
  424.             self:SetSize(180,220)
  425.             self.Alpha = 0
  426.         end
  427.  
  428.         function PANEL:Paint(w,h)
  429.             draw.RoundedBox(0,0,0,w,h,Color(60,60,60,255))
  430.  
  431.             if self.Material then
  432.                 surface.SetMaterial( self.Material )
  433.                 surface.SetDrawColor(255,255,255)
  434.                 surface.DrawTexturedRect(w/2-40,w/2-40,80,80)
  435.             end
  436.  
  437.             if self:IsHovered() then
  438.                 self.Alpha = Lerp(FrameTime()*2, self.Alpha, 100)
  439.                 draw.RoundedBox(0,0,0,w,h,Color(0,0,0,self.Alpha))
  440.  
  441.                 local text = DarkRP.textWrap( self.ItemData.name, "GModNotify", w-50 )
  442.                 local pricetext = string.format( "Купить (%s)", DarkRP.formatMoney(self.ItemData.price) )
  443.  
  444.                 draw.DrawText(text , "GModNotify", w/2, 30, Color(255,255,255), 1)
  445.  
  446.                 local t1w,t1h = surface.GetTextSize(text)
  447.                 local t2w,t2h = surface.GetTextSize(pricetext)
  448.  
  449.                 t2w = t2w + 10
  450.  
  451.                 draw.RoundedBox( 0, w/2 - t2w/2, h-t2h-10, t2w, t2h, Color(200,120,0) )
  452.                 draw.DrawText( pricetext, "GModNotify", w/2, h-t2h-10, Color(255,255,255), 1)
  453.  
  454.                 self:SetCursor("hand")
  455.             else
  456.                 self.Alpha = 0
  457.                 self:SetCursor('none')
  458.                 draw.DrawText(DarkRP.textWrap( self.ItemData.name, "GModNotify", w-50 ) , "GModNotify", w/2, 160, Color(255,255,255), 1)
  459.             end
  460.         end
  461.  
  462.         function PANEL:SetDarkRPItem(item, data)
  463.             self.ItemID     =   item
  464.             self.ItemData   =   data
  465.             self.Material   =   Material("VGUI/entities/" .. data.entity)
  466.         end
  467.  
  468.         function PANEL:OnMousePressed()
  469.             return buyWeapon(self.ItemData.entity)
  470.         end
  471.  
  472.         vgui.Register( "F4WeaponsInfo", PANEL, "EditablePanel")
  473.     end
  474.  
  475.     do
  476.         local PANEL = {}
  477.  
  478.         function PANEL:Init()
  479.             self:Dock(FILL)
  480.  
  481.             self.TabScroll = self:Add("EditablePanel")
  482.             self.TabScroll:Dock(TOP)
  483.             self.TabScroll:SetTall(30)
  484.             self.TabScroll.Loaded = true
  485.  
  486.             function self.TabScroll.Paint(_,w,h)
  487.                 draw.RoundedBox(0,0,0,w,h,Color(80,80,80))
  488.             end
  489.  
  490.             local wscroll = self:Add("DF4Scroll")
  491.             wscroll:Dock(FILL)
  492.  
  493.             self.WeaponList = wscroll:Add("DIconLayout")
  494.             self.WeaponList:Dock(FILL)
  495.             self.WeaponList:SetSpaceX(5)
  496.             self.WeaponList:SetSpaceY(5)
  497.         end
  498.  
  499.         function PANEL:LoadTabs(activeTab)
  500.             self.TabScroll :Clear()
  501.             self.WeaponList:Clear()
  502.  
  503.             local back = self.TabScroll:Add("DButton")
  504.             back:Dock(LEFT)
  505.             back:SetWide(30)
  506.             back:SetText("")
  507.             back.Paint = function(_,w,h)
  508.                 surface.SetDrawColor(255,255,255)
  509.                 surface.DrawLine(10, 4, 3, h/2)
  510.                 surface.DrawLine(3, h/2, 10, h-4)
  511.             end
  512.             back.DoClick = function()
  513.                 local parent = self:GetParent()
  514.  
  515.                 parent:Clear()
  516.                 parent:Add("F4Weapons"):Dock(FILL)
  517.             end
  518.  
  519.             local cnt = #DarkRP.getCategories().shipments
  520.             for k,v in pairs(DarkRP.getCategories().shipments) do
  521.                 local tabButton = self.TabScroll:Add("DButton")
  522.                 tabButton:SetText("")
  523.                 tabButton:Dock(LEFT)
  524.                 tabButton:DockMargin(1,0,1,0)
  525.                 tabButton.Paint = function(tab, w, h)
  526.                     local tab_wide = ((self.TabScroll:GetWide() - 30) - ( cnt * 2 )) / cnt
  527.                     tab:SetWide(tab_wide)
  528.  
  529.                     draw.SimpleText( v.name , "GModNotify", 2, h/2, Color(255,255,255), 0, 1)
  530.  
  531.                     if activeTab == v.name then
  532.                         draw.RoundedBox(0,0,0,w,h,Color(255,120,0,15))
  533.                     end
  534.  
  535.                     surface.SetDrawColor(60,60,60)
  536.                     surface.DrawOutlinedRect(0,0,w,h)
  537.                 end
  538.                 tabButton.DoClick = function()
  539.                     self:LoadTabs(v.name)
  540.                 end
  541.  
  542.                 if activeTab == v.name then
  543.                     for k,v in pairs(v.members) do
  544.                         local weaponInfo = self.WeaponList:Add("F4WeaponsInfo")
  545.                         weaponInfo:SetDarkRPItem(v.entity, v)
  546.                     end
  547.                 end
  548.             end
  549.         end
  550.  
  551.         vgui.Register("F4WeaponsFullList", PANEL, "EditablePanel")
  552.     end
  553.  
  554.     do
  555.         local PANEL = {}
  556.  
  557.         function PANEL:Init()
  558.             self:SetTall(40)
  559.             self:SetCursor("hand")
  560.             self:SetText("")
  561.         end
  562.  
  563.         function PANEL:Paint(w,h)
  564.             if self.Material then
  565.                 surface.SetMaterial(self.Material)
  566.                 surface.SetDrawColor(255,255,255)
  567.                 surface.DrawTexturedRect((w - w/2) - (h/2),0,h,h)
  568.             else
  569.                 draw.SimpleText( "<corrupt icon>", "DermaDefault", w/2, h/2, Color(255,255,255), 1, 1)
  570.             end
  571.  
  572.             if self:IsHovered() then
  573.                 draw.RoundedBox( 0, 0, 0, w, h, Color(0,0,0,140))
  574.                 draw.DrawText(DarkRP.textWrap(self.ItemData.name, "DermaDefault", w-10), "DermaDefault", w/2, 5, Color(255,255,255), 1)
  575.             end
  576.  
  577.             surface.SetDrawColor(80,80,80)
  578.             surface.DrawOutlinedRect(0,0,w,h)
  579.         end
  580.  
  581.         function PANEL:SetItem(a, v)
  582.             self.Material   = Material("VGUI/entities/" .. (v.entity))
  583.             self.ItemID     = v.cmd
  584.             self.ItemData   = v
  585.  
  586.             self:SetTooltip("Нажмите чтобы купить " .. "(" .. DarkRP.formatMoney(self.ItemData.price) .. ")")
  587.         end
  588.  
  589.         function PANEL:DoClick()
  590.             if self.ItemData then
  591.                 buyWeapon(self.ItemData.entity)
  592.             end
  593.         end
  594.  
  595.         vgui.Register( "F4WeaponsFastItem", PANEL, "DButton")
  596.     end
  597.  
  598.     do
  599.         local PANEL = {}
  600.         AccessorFunc( PANEL, "_AHAH_Nice_Meme", "ItemCount", FORCE_NUMBER)
  601.  
  602.         --local headerFormatNormal = "%s"
  603.         --local headerFormatMany     = "%s (%d Items more)"
  604.  
  605.  
  606.         function PANEL:Init()
  607.             self:SetTall(24)
  608.             self:Dock(TOP)
  609.             self:DockMargin(0,0,0,4)
  610.  
  611.             local header = self:Add("DButton")
  612.             header:Dock(TOP)
  613.             header:SetTall(24)
  614.             header:SetText("")
  615.             header.Paint = function(_,w,h)
  616.                 draw.RoundedBox(0,0,0,w,h,Color(80,80,80))
  617.                 draw.DrawText( self.Category.name, "GModNotify", 5, 2, Color(255,255,255))
  618.  
  619.                 surface.SetDrawColor(255,255,255)
  620.  
  621.                 if self:GetItemCount() > 5 then
  622.                     draw.DrawText( "(" .. self:GetItemCount() - 5 .. " Items more)", "GModNotify", w-20, 2, Color(255,255,255), TEXT_ALIGN_RIGHT)
  623.                 end
  624.  
  625.                 if self:GetItemCount() > 0 then
  626.                     surface.DrawLine(w-12, 4, w-7, h/2)
  627.                     surface.DrawLine(w-7, h/2, w-12, h-4)
  628.                 end
  629.             end
  630.  
  631.             header.DoClick = function()
  632.                 local parent = self:GetParent()
  633.  
  634.                 parent:Clear()
  635.                 parent:Add("F4WeaponsFullList"):LoadTabs(self.Category.name)
  636.             end
  637.  
  638.             self.Items = {}
  639.  
  640.             self.ItemScroll = self:Add( "DIconLayout" )
  641.             self.ItemScroll:Dock(FILL)
  642.             self.ItemScroll:DockMargin(2,2,2,2)
  643.             self.ItemScroll:SetSpaceX(5)
  644.             self.ItemScroll:SetSpaceY(0)
  645.  
  646.             self:SetItemCount(0)
  647.         end
  648.  
  649.         function PANEL:Paint(w,h)
  650.             draw.RoundedBox(0,0,0,w,h,Color(60,60,60))
  651.         end
  652.  
  653.         function PANEL:AddItem(item, v)
  654.             self:SetTall(70)
  655.  
  656.             if self:GetItemCount() < 5 then
  657.                 local fitem = self.ItemScroll:Add("F4WeaponsFastItem")
  658.                 fitem:SetItem(item, v)
  659.             end
  660.  
  661.             table.insert(self.Items, item)
  662.  
  663.             self:SetItemCount( self:GetItemCount() + 1 )
  664.         end
  665.  
  666.         function PANEL:SetCategory(shipments, cat)
  667.             local data = shipments[cat]
  668.             self.Category = data
  669.  
  670.             for k,v in pairs(data.members) do
  671.                 self:AddItem(k, v)
  672.             end
  673.         end
  674.  
  675.         vgui.Register( 'F4WeaponsCategory', PANEL, 'EditablePanel' )
  676.     end
  677.  
  678.     do
  679.         local PANEL = {}
  680.  
  681.         function PANEL:Init()
  682.  
  683.             self.WeaponList = self:Add( "DF4Scroll" )
  684.             self.WeaponList:Dock( FILL )
  685.  
  686.             self:BuildPanels()
  687.         end
  688.  
  689.  
  690.  
  691.         function PANEL:BuildPanels()
  692.             local shipment_cat = DarkRP.getCategories().shipments
  693.  
  694.             for k,v in pairs(shipment_cat) do
  695.                 local aaa = self.WeaponList:Add("F4WeaponsCategory")
  696.                 aaa:SetCategory(shipment_cat, k)
  697.             end
  698.         end
  699.  
  700.         vgui.Register( 'F4Weapons', PANEL, 'EditablePanel' )
  701.  
  702.     end
  703.  
  704. end
  705.  
  706. do
  707.     do
  708.         local PANEL = {}
  709.  
  710.         function PANEL:Init()
  711.             self:Dock(TOP)
  712.             self:DockMargin(0,1,0,0)
  713.             self:SetTall(50)
  714.  
  715.             self.Icon = self:Add("SpawnIcon")
  716.             self.Icon:Dock(LEFT)
  717.             self.Icon:DockMargin(2,2,2,2)
  718.             self.Icon:SetWide(46)
  719.  
  720.             self.Buy = self:Add("DButton")
  721.             self.Buy:Dock(RIGHT)
  722.             self.Buy:SetWide(120)
  723.             self.Buy:DockMargin(0,10,24,10)
  724.         end
  725.  
  726.         function PANEL:Paint(w,h)
  727.             draw.RoundedBox(0,0,0,w,h,Color(60,60,60))
  728.  
  729.             draw.DrawText(self.Item.name, "GModNotify", 60, 5, Color(255,255,255))
  730.             draw.DrawText( "Энергия:", "DermaDefault", 60, 33, Color(255,255,255))
  731.  
  732.             local val = math.Clamp( self.Item.energy/100, 0, 1)
  733.  
  734.             draw.RoundedBox(0,110,35,100,12,Color(0,0,0,50))
  735.             draw.RoundedBox(0,110,35,100 * val,12,HSVToColor(self.Item.energy * 1.7, 1, 1))
  736.  
  737.             draw.DrawText( self.Item.energy .. '%', "DermaDefault", 112, 34, Color(60,60,60), TEXT_ALIGN_LEFT )
  738.         end
  739.  
  740.         function PANEL:SetFood(food)
  741.             self.Icon:SetModel(food.model)
  742.             self.Item = food
  743.  
  744.             self.Buy:SetText( string.format( "Купить (%s)", DarkRP.formatMoney(self.Item.price)) )
  745.  
  746.             self.Buy.DoClick = function()
  747.                 RunConsoleCommand( "darkrp", "buyfood", self.Item.name)
  748.             end
  749.         end
  750.  
  751.         vgui.Register( "F4FoodItem", PANEL, "EditablePanel")
  752.     end
  753.  
  754.     do
  755.         local PANEL = {}
  756.  
  757.         function PANEL:Init()
  758.             self:Dock(FILL)
  759.  
  760.             self.Header = self:Add("EditablePanel")
  761.             self.Header:Dock(TOP)
  762.             self.Header:SetTall(28)
  763.             self.Header.Paint = function(_, w, h)
  764.                 draw.RoundedBox( 0, 0, 0, w, h, Color(60,60,60))
  765.                 draw.DrawText( "Категорий еды нет, но вы держитесь! ty falco", "GModNotify", 2, 2, Color(255,255,255) )
  766.             end
  767.  
  768.             self.Scroll = self:Add("DF4Scroll")
  769.             self.Scroll:Dock(FILL)
  770.             self:UpdateFoodItems()
  771.  
  772.         end
  773.  
  774.         function PANEL:UpdateFoodItems()
  775.             self.Scroll:Clear()
  776.  
  777.             for k,v in pairs(FoodItems) do
  778.                 local item = self.Scroll:Add("F4FoodItem")
  779.                 item:SetFood(v)
  780.             end
  781.         end
  782.  
  783.         vgui.Register( "F4Food", PANEL, "EditablePanel")
  784.     end
  785. end
  786.  
  787. do
  788.     local function canBuyEntity(item)
  789.         local ply = LocalPlayer()
  790.  
  791.         if istable(item.allowed) and not table.HasValue(item.allowed, ply:Team()) then return false, true end
  792.         if item.customCheck and not item.customCheck(ply) then return false, true end
  793.  
  794.         local canbuy, suppress, message, price = hook.Call("canBuyCustomEntity", nil, ply, item)
  795.         local cost = price or item.getPrice and item.getPrice(ply, item.price) or item.price
  796.         if not ply:canAfford(cost) then return false, false, message, cost end
  797.  
  798.         if canbuy == false then
  799.             return false, suppress, message, cost
  800.         end
  801.  
  802.         return true, nil, message, cost
  803.     end
  804.  
  805.     local PANEL = {}
  806.  
  807.     function PANEL:Init()
  808.  
  809.         self.WeaponList = self:Add( "DF4Scroll" )
  810.         self.WeaponList:Dock( FILL )
  811.  
  812.         for EntityID, Entity in pairs( DarkRPEntities ) do
  813.  
  814.             local ply = LocalPlayer()
  815.             local ship = Entity
  816.  
  817.             local cost = ship.getPrice and ship.getPrice(ply, ship.price) or ship.price
  818.  
  819.             local base = self.WeaponList:Add( "EditablePanel" )
  820.             base:Dock(TOP)
  821.             base:DockMargin(0,0,0,2)
  822.             base:SetTall(55)
  823.             base.Paint = function( self, w, h )
  824.                 draw.RoundedBox( 0, 0, 0, w, h, Color(80,80,80) )
  825.                 local canBuy = canBuyEntity( ship )
  826.                 if self.Rad and canBuy then
  827.                     surface.SetMaterial( gradient )
  828.                     surface.SetDrawColor( 54, 200, 54, rad_lerp * 255)
  829.                     surface.DrawTexturedRect(0,0,400,h)
  830.  
  831.                     rad_lerp = Lerp( 0.03, rad_lerp, 1 )
  832.                 end
  833.                 draw.DrawText( ship.name, 'GModNotify', 65, 18, Color( 255,255,255 ))
  834.  
  835.                 if not canBuy then
  836.                     draw.RoundedBox( 0, 0, 0, w, h, Color(255,54,54,10))
  837.                 end
  838.             end
  839.  
  840.             local swepico = base:Add("SpawnIcon")
  841.             swepico:Dock( LEFT )
  842.             swepico:DockMargin(2,2,2,2)
  843.             swepico:SetPos(2, 2)
  844.             swepico:SetSize(51,51)
  845.             swepico:SetModel( ship.model )
  846.  
  847.             local wepBtn = base:Add( "DButton" )
  848.             wepBtn:Dock(FILL)
  849.             wepBtn:SetText("")
  850.             wepBtn.Paint = nil
  851.  
  852.             wepBtn.OnCursorEntered = function(self)
  853.                 base.Rad = true
  854.                 rad_lerp = 0
  855.             end
  856.  
  857.             wepBtn.OnCursorExited = function(self)
  858.                 base.Rad = nil
  859.                 rad_lerp = 0
  860.             end
  861.  
  862.             local buyBtn = base:Add( "DButton" )
  863.             buyBtn:Dock(RIGHT)
  864.             buyBtn:DockMargin( 0, 5, 10, 5 )
  865.             buyBtn:SetWide(200)
  866.             buyBtn:SetText(string.format( 'Купить (%s)', DarkRP.formatMoney( cost ) ))
  867.             buyBtn:SetFont('GModNotify')
  868.  
  869.             buyBtn.DoClick = function()
  870.                 RunConsoleCommand( 'darkrp', ship.cmd )
  871.             end
  872.  
  873.         end
  874.     end
  875.  
  876.     vgui.Register( 'F4Entities', PANEL, 'EditablePanel' )
  877.  
  878. end
  879.  
  880. local bell = Material("icon16/bell.png")
  881.  
  882. do
  883.     local function canBuyAmmo(item)
  884.         local ply = LocalPlayer()
  885.  
  886.         if item.customCheck and not item.customCheck(ply) then return false, true end
  887.  
  888.         local canbuy, suppress, message, price = hook.Call("canBuyAmmo", nil, ply, item)
  889.         local cost = price or item.getPrice and item.getPrice(ply, item.price) or item.price
  890.         if not ply:canAfford(cost) then return false, false, message, cost end
  891.  
  892.         if canbuy == false then
  893.             return false, suppress, message, price
  894.         end
  895.  
  896.         return true, nil, message, price
  897.     end
  898.  
  899.     local PANEL = {}
  900.  
  901.     function PANEL:Init()
  902.  
  903.         self.WeaponList = self:Add( "DF4Scroll" )
  904.         self.WeaponList:Dock( FILL )
  905.  
  906.         for AmmoID, Ammo in pairs( GAMEMODE.AmmoTypes ) do
  907.  
  908.             local ply = LocalPlayer()
  909.             local ship = Ammo
  910.  
  911.             local cost = ship.getPrice and ship.getPrice(ply, ship.price) or ship.price
  912.  
  913.             local base = self.WeaponList:Add( "EditablePanel" )
  914.             base:Dock(TOP)
  915.             base:DockMargin(0,0,0,2)
  916.             base:SetTall(55)
  917.             base.Paint = function( self, w, h )
  918.                 draw.RoundedBox( 0, 0, 0, w, h, Color(80,80,80) )
  919.                 local canBuy = canBuyAmmo( ship )
  920.                 if self.Rad and canBuy then
  921.                     surface.SetMaterial( gradient )
  922.                     surface.SetDrawColor( 54, 200, 54, rad_lerp * 255)
  923.                     surface.DrawTexturedRect(0,0,400,h)
  924.  
  925.                     rad_lerp = Lerp( 0.03, rad_lerp, 1 )
  926.                 end
  927.                 draw.DrawText( ship.name, 'GModNotify', 65, 18, Color( 255,255,255 ))
  928.  
  929.                 if not canBuy then
  930.                     draw.RoundedBox( 0, 0, 0, w, h, Color(255,54,54,10))
  931.                 end
  932.             end
  933.  
  934.             local swepico = base:Add("SpawnIcon")
  935.             swepico:Dock( LEFT )
  936.             swepico:DockMargin(2,2,2,2)
  937.             swepico:SetPos(2, 2)
  938.             swepico:SetSize(51,51)
  939.             swepico:SetModel( ship.model )
  940.  
  941.             local wepBtn = base:Add( "DButton" )
  942.             wepBtn:Dock(FILL)
  943.             wepBtn:SetText("")
  944.             wepBtn.Paint = nil
  945.  
  946.             wepBtn.OnCursorEntered = function(self)
  947.                 base.Rad = true
  948.                 rad_lerp = 0
  949.             end
  950.  
  951.             wepBtn.OnCursorExited = function(self)
  952.                 base.Rad = nil
  953.                 rad_lerp = 0
  954.             end
  955.  
  956.             local buyBtn = base:Add( "DButton" )
  957.             buyBtn:Dock(RIGHT)
  958.             buyBtn:DockMargin( 0, 5, 10, 5 )
  959.             buyBtn:SetWide(200)
  960.             buyBtn:SetText(string.format( 'Купить (%s)', DarkRP.formatMoney( cost ) ))
  961.             buyBtn:SetFont('GModNotify')
  962.  
  963.             buyBtn.DoClick = function()
  964.                 RunConsoleCommand( 'darkrp', 'buyammo', ship.id )
  965.             end
  966.  
  967.         end
  968.     end
  969.  
  970.     vgui.Register( 'F4Ammo', PANEL, 'EditablePanel' )
  971.  
  972. end
  973.  
  974. do
  975.  
  976.     local PANEL = {}
  977.  
  978.     function PANEL:Init()
  979.         return
  980.     end
  981.  
  982.     function PANEL:OnSwitchedTo()
  983.         self:Clear()
  984.         self.Update = true
  985.  
  986.         self.JobRelation = self:Add( "EditablePanel" )
  987.         self.JobRelation:Dock( BOTTOM )
  988.         self.JobRelation:DockMargin(2,2,2,2)
  989.         self.JobRelation:DockPadding(15,30,15,20)
  990.         self.JobRelation:SetTall(100)
  991.  
  992.         self.JobRelation.Paint = function(self,w,h)
  993.             draw.RoundedBox( 0, 0, 0, w, h, Color(60,60,60,140))
  994.             draw.DrawText( 'График работ', 'DermaDefault', 8, 5, Color(255,255,255) )
  995.  
  996.             surface.SetDrawColor(255,255,255)
  997.             surface.DrawOutlinedRect(0,0,w,h)
  998.         end
  999.  
  1000.  
  1001.  
  1002.         self.JobRelationButtons = self.JobRelation:Add( "EditablePanel" )
  1003.         self.JobRelationButtons:Dock(FILL)
  1004.  
  1005.         self.Stats = self:Add( "DPanel" )
  1006.         self.Stats:Dock(FILL)
  1007.         self.Stats:DockMargin( 2, 2, 2, 2 )
  1008.  
  1009.         self.Stats.Paint = function( self, w, h )
  1010.             draw.DrawText( 'Статистика', 'DermaDefault', 5, 5, Color(255,255,255) )
  1011.  
  1012.             draw.SimpleText( "Игроки:", "default", 20, 85, Color( 255, 255, 255 ) )
  1013.  
  1014.             draw.SimpleText( #player.GetAll().." онлайн", "default", 92, 105, Color( 255, 255, 255 ) )
  1015.             draw.SimpleText( GetConVarNumber( "maxplayers" ).." слотов", "default", 92, 120, Color( 255, 255, 255 ) )
  1016.  
  1017.             local maxBase = 0
  1018.  
  1019.             local money = 0
  1020.  
  1021.             local jobs = {}
  1022.  
  1023.             for k, v in pairs( player.GetAll() ) do
  1024.                 local vMoney = v:getDarkRPVar( "money" ) or 0
  1025.                 money = money + vMoney
  1026.             end
  1027.  
  1028.             local mTable = {}
  1029.  
  1030.             for k, v in pairs( player.GetAll() ) do
  1031.                 table.insert( mTable, { ply = v, money = v:getDarkRPVar( "money" ) or 0 } )
  1032.             end
  1033.  
  1034.             table.SortByMember( mTable, "money" )
  1035.  
  1036.             local first = table.GetFirstValue( mTable )
  1037.  
  1038.             draw.SimpleText( "Экономика:", "default", 20, 170, Color( 255, 255, 255 ) )
  1039.  
  1040.             local tMoney = string.Comma(math.ceil(money)) or "Error Loading"
  1041.             local highMoney = string.Comma(math.ceil( first.money )) or "Error Loading"
  1042.  
  1043.             draw.SimpleText( "$"..tMoney.." денег на сервере", "default", 92, 187, Color( 255, 255, 255 ) )
  1044.             draw.SimpleText( "$"..highMoney.." самый богатый", "default", 92, 204, Color( 255, 255, 255 ) )
  1045.             draw.SimpleText( "- "..string.upper(first.ply:Nick()), "default", 92, 220, Color( 255, 255, 255 ) )
  1046.  
  1047.             draw.SimpleText( "Контакты:", "default", 20, 250, Color( 255, 255, 255 ) )
  1048.  
  1049.             surface.SetDrawColor( Color( 255, 255, 255 ) )
  1050.             surface.DrawLine( 24, 68, w - 24, 68 )
  1051.             surface.DrawLine( 24, 104, w - 24, 104 )
  1052.             surface.DrawLine( 24, 186, w - 24, 186 )
  1053.             surface.DrawLine( 24, 270, w - 24, 270 )
  1054.  
  1055.             surface.DrawLine( 84, 70, 84, self:GetTall() - 44 )
  1056.  
  1057.             surface.SetDrawColor(255,255,255)
  1058.             surface.DrawOutlinedRect(0,0,w,h)
  1059.         end
  1060.  
  1061.         do
  1062.             local function profile(sid64)
  1063.                 return function()
  1064.                     gui.OpenURL('http://steamcommunity.com/id/'..sid64)
  1065.                 end
  1066.             end
  1067.  
  1068.             local btn2 = self.Stats:Add("DButton")
  1069.             btn2:SetPos( 89, 275)
  1070.             btn2:SetSize(120,24)
  1071.             btn2:SetText( "AppleJeb" )
  1072.             btn2:SetTooltip('Основатель/Кодер')
  1073.             btn2.DoClick = profile('applejeb')
  1074.  
  1075.         end
  1076.  
  1077.         local teamsorted, sized = {}, {}
  1078.  
  1079.         for k,v in ipairs( player.GetAll() ) do
  1080.             teamsorted[v:Team()] = teamsorted[v:Team()] or {}
  1081.             table.insert( teamsorted[v:Team()], v )
  1082.         end
  1083.  
  1084.         for k,v in pairs(teamsorted) do
  1085.             local val = team.NumPlayers(k) / #player.GetAll()
  1086.  
  1087.             local job = self.JobRelationButtons:Add( "DButton" )
  1088.             job:Dock(LEFT)
  1089.             job:SetText("")
  1090.             job:SetTooltip(team.GetName(k))
  1091.             job.Paint = function(self, rw, rh)
  1092.                 draw.RoundedBox( 0, 0, 0, rw, rh, team.GetColor(k) )
  1093.  
  1094.                 surface.SetDrawColor(255,255,255)
  1095.                 surface.DrawOutlinedRect(0,0,rw,rh)
  1096.             end
  1097.             job.Think = function(self)
  1098.                 local parent = self:GetParent()
  1099.                 local wanted_size = val * parent:GetWide()
  1100.                 self:SetSize(wanted_size, parent:GetTall())
  1101.             end
  1102.             job.DoClick = function()
  1103.                 local m = DermaMenu()
  1104.                 for k, v in pairs(v) do
  1105.                     if IsValid(v) then
  1106.                         m:AddOption( v:GetName(), function()
  1107.                             gui.OpenURL( 'http://steamid.io/lookup/'..v:SteamID64() )
  1108.                         end)
  1109.                     end
  1110.                 end
  1111.                 m:Open()
  1112.                 RegisterDermaMenuForClose(m)
  1113.             end
  1114.  
  1115.         end
  1116.  
  1117.         self.AdminBG = self:Add( "EditablePanel" )
  1118.         self.AdminBG:Dock( LEFT )
  1119.         self.AdminBG:DockMargin(2,2,0,2)
  1120.         self.AdminBG:DockPadding(2,24,2,2)
  1121.         self.AdminBG:SetWide( 200 )
  1122.  
  1123.         self.AdminBG.PaintOver = function( self, w, h )
  1124.             surface.SetDrawColor(255,255,255)
  1125.             surface.DrawOutlinedRect(0,0,w,h)
  1126.  
  1127.             draw.DrawText( 'Админы онлайн', 'DermaDefault', 5, 5, Color(255,255,255) )
  1128.         end
  1129.  
  1130.         self.AdminList = self.AdminBG:Add( "DF4Scroll" )
  1131.         self.AdminList:Dock(FILL)
  1132.  
  1133.         do
  1134.             local plys = player.GetAll()
  1135.  
  1136.             local immunityWorkaround = {
  1137.                 ["user"]        = 0,
  1138.                 ["vip"]         = 10,
  1139.                 ["moderator"]   = 20,
  1140.                 ["admin"]       = 30,
  1141.                 ["admin+"]      = 40,
  1142.                 ["superadmin+"] = 75,
  1143.                 ["owner"]       = 80,
  1144.                 ["guardian"]    = 90,
  1145.                 ["superadmin"]  = 100,
  1146.                 ["waifu"]       = 100,
  1147.             }
  1148.  
  1149.             local function getimmunity(group)
  1150.                 return immunityWorkaround[group] or 0
  1151.                 --return (FAdmin and FAdmin.Access and FAdmin.Access.Groups) and ( FAdmin.Access.Groups[group] and FAdmin.Access.Groups[group].immunity or 0 ) or 0
  1152.             end
  1153.  
  1154.             table.sort( plys, function(f,l)
  1155.                 return getimmunity(f:GetUserGroup()) > getimmunity(l:GetUserGroup())
  1156.             end)
  1157.  
  1158.             for k,v in pairs( plys ) do
  1159.                 if v:GetUserGroup() == 'user' or v:GetUserGroup() == 'noaccess' or v:GetUserGroup() == 'vip' then continue end
  1160.  
  1161.                 local admin = self.AdminList:Add( "EditablePanel" )
  1162.                 admin:Dock(TOP)
  1163.                 admin:DockMargin( 0, 0, 0, 2 )
  1164.                 admin:SetTall(30)
  1165.  
  1166.                 local avatar = admin:Add( "AvatarImage" )
  1167.                 avatar:Dock(LEFT)
  1168.                 avatar:DockMargin(1,1,1,1)
  1169.                 avatar:SetWide(28)
  1170.                 avatar:SetPlayer(v)
  1171.  
  1172.                 local label = admin:Add( "DLabel" )
  1173.                 label:SetPos( 35, 3 )
  1174.                 label:SetSize(160, 16)
  1175.                 label:SetColor(Color(255,255,255))
  1176.                 label:SetText(v:GetName())
  1177.                 label:SetFont("HUDSELECTIONTEXT")
  1178.  
  1179.                 local rank = admin:Add( "DLabel" )
  1180.                 rank:SetPos( 35, 15 )
  1181.                 rank:SetSize(160, 16)
  1182.                 rank:SetColor(HSVToColor(360*(getimmunity(v:GetUserGroup())/100), 1, 1))
  1183.                 rank:SetText(v:GetUserGroup())
  1184.  
  1185.                 local call = admin:Add( "DButton" )
  1186.                 call:Dock(RIGHT)
  1187.                 call:SetWide(30)
  1188.                 call:SetText("")
  1189.                 call.PaintOver = function(_,w,h)
  1190.                     surface.SetMaterial( bell )
  1191.                     surface.SetDrawColor(255,255,255)
  1192.                     surface.DrawTexturedRect(w/2 - 8,w/2 - 8,16,16)
  1193.                 end
  1194.                 call.DoClick = function()
  1195.                     RunConsoleCommand('darkrp', 'calladmin', v:UserID())
  1196.                 end
  1197.             end
  1198.  
  1199.         end
  1200.     end
  1201.  
  1202.     vgui.Register( 'F4Main', PANEL, 'EditablePanel' )
  1203.  
  1204. end
  1205.  
  1206. F4.Starting = false
  1207.  
  1208. F4.ToggleMenu = function()
  1209.     if F4.Starting then
  1210.         return
  1211.     end
  1212.  
  1213.     if IsValid( F4.MenuFrame ) then
  1214.         if F4.MenuFrame:IsVisible() then
  1215.             F4.MenuFrame:Close()
  1216.         else
  1217.             F4.MenuFrame:SetAlpha(0)
  1218.             F4.MenuFrame:SetVisible(true)
  1219.             F4.MenuFrame:AlphaTo(255,0.2)
  1220.             F4.MenuFrame.OpenCT = CurTime() + 0.6
  1221.  
  1222.             local tab = F4.MenuFrame:GetActiveTab():GetPanel()
  1223.  
  1224.             if IsValid(tab) and tab.OnSwitchedTo then
  1225.                 tab.OnSwitchedTo(tab)
  1226.             end
  1227.         end
  1228.         return false
  1229.     end
  1230.  
  1231.     timer.Simple( 1, function()
  1232.         F4.MenuFrame = vgui.Create( 'F4MenuFrame' )
  1233.         F4.MenuFrame:AddTab( 'CakeRP', vgui.Create( 'F4Main') )
  1234.         F4.MenuFrame:AddTab( 'Профессии', vgui.Create( 'F4Jobs') )
  1235.         F4.MenuFrame:AddTab( 'Оружие', vgui.Create( 'F4Weapons') )
  1236.         F4.MenuFrame:AddTab( 'Hello, food?', vgui.Create( 'F4Food') )
  1237.         F4.MenuFrame:AddTab( 'Предметы', vgui.Create( 'F4Entities') )
  1238.         F4.MenuFrame:AddTab( 'Патроны', vgui.Create( 'F4Ammo') )
  1239.         if cookie.GetString('zdarova', nil) ~= 'yes' then
  1240.             cookie.Set( 'zdarova', 'yes' )
  1241.             print('yes')
  1242.             local note = F4.MenuFrame:Add( "EditablePanel" )
  1243.             note:SetPos(0,0)
  1244.             note:SetSize(F4.MenuFrame:GetSize())
  1245.             note.curtime = CurTime() + 2
  1246.             note.zdarova_lerp = 0
  1247.             note.Paint = function(_,w,h)
  1248.                 draw.RoundedBox( 0, 0, 0, w, h, Color(60,60,60))
  1249.                 draw.SimpleText( 'Встречайте!', 'default', w/2, h/2, HSVToColor( math.sin(CurTime()*0.1) * 360, 1, 1), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER )
  1250.                 if CurTime() > _.curtime then
  1251.                     _.zdarova_lerp = Lerp( 0.1, _.zdarova_lerp, 255 )
  1252.                     draw.DrawText( 'Оригинальное F4 меню.\nСпециально для CakeRP', 'GModNotify', w/2, h/2 + 40, Color(170,170,170,_.zdarova_lerp), TEXT_ALIGN_CENTER )
  1253.                 end
  1254.             end
  1255.  
  1256.             local close_note = note:Add( "DButton" )
  1257.             close_note:Dock( BOTTOM )
  1258.             close_note:SetText('Скрыть')
  1259.             close_note.DoClick = function()
  1260.                 note:SizeTo( -1, 0, 0.3, 0, -1, function(_, self)
  1261.                     self:Remove()
  1262.                 end)
  1263.             end
  1264.             close_note:SetColor(Color(255,255,255))
  1265.             close_note.Paint = function(_,w,h)
  1266.                 draw.RoundedBox( 0, 0, h-2, w, 2, Color(255,255,255))
  1267.             end
  1268.  
  1269.         end
  1270.  
  1271.         F4.Starting = false
  1272.         hook.Remove('HUDPaint', 'F4_Staring')
  1273.     end)
  1274.  
  1275.     hook.Add( 'HUDPaint', 'F4_Staring', function()
  1276.         draw.DrawText( 'Пожалуйста, подождите\nМеню F4 загружается. Если игра зависла подождите пару секунд\nНажатие клавиш во время загрузки может привести к крашу игры', 'GModNotify', 5, 5, Color(255,255,255))
  1277.     end)
  1278.  
  1279.     F4.Starting = true
  1280.  
  1281. end
  1282.  
  1283. timer.Create( "F4Override", 2, 0, function()
  1284.     GAMEMODE.ShowSpare2 = F4.ToggleMenu
  1285. end )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement