Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local FAdmin = FAdmin or FAdminPort
- F4 = F4 or {}
- if IsValid( F4.MenuFrame ) then
- F4.MenuFrame:Remove()
- F4.ToggleMenu()
- end
- do
- local PANEL = {}
- AccessorFunc( PANEL, '_hdr', 'TabHolder' )
- AccessorFunc( PANEL, '_pnl', 'Panel' )
- function PANEL:Init()
- self:Dock(TOP)
- self:DockMargin(0,0,0,1)
- self:SetTall(40)
- self:SetFont( 'GModNotify' )
- self:SetColor(Color(255,255,255))
- end
- function PANEL:Paint( w, h )
- draw.RoundedBox( 0, 0, 0, w, h, Color(80,80,80,255) )
- end
- function PANEL:PaintOver( w, h )
- if IsValid( self:GetTabHolder() ) and self:GetTabHolder():GetParent():GetActiveTab() == self then
- draw.RoundedBox( 0, 0, 0, w, h, Color(255,255,255,10) )
- draw.RoundedBox( 0, w-2, 0, 2, h, Color(19, 144, 20) )
- end
- end
- function PANEL:DoClick()
- if IsValid( self:GetTabHolder() ) then
- self:GetTabHolder():GetParent():SetTab( self )
- end
- end
- vgui.Register( 'F4MenuTab', PANEL, 'DButton' )
- end
- do
- local PANEL = {}
- function PANEL:Init()
- local w = math.Clamp( ScrW() * 0.7, 800, ScrW() )
- local h = math.Clamp( ScrH() * 0.68, 600, ScrH() )
- self:SetSize( w, h )
- self:Center()
- self:MakePopup()
- self:SetDraggable(false)
- self:SetTitle( '' )
- self.btnMinim:SetVisible( false )
- self.btnMaxim:SetVisible( false )
- self.Items = {}
- self:DockPadding( 2, 24, 2, 2 )
- self.Tabholder = self:Add( "DScrollPanel" )
- self.Tabholder:Dock( LEFT )
- self.Tabholder:SetWide(150)
- self.TabSheet = self:Add( 'EditablePanel' )
- self.TabSheet:Dock( FILL )
- self.TabSheet:DockMargin(2,0,0,0)
- self.TabSheet.Think = function(sheet)
- if sheet.ActivePanel and IsValid( sheet.ActivePanel ) then
- sheet.ActivePanel:SetSize( sheet:GetSize() )
- end
- end
- self.OpenCT = CurTime() + 0.2
- self.btnClose:MoveToFront()
- end
- function PANEL:Paint( w, h )
- draw.RoundedBox( 0, 0, 0, w, h, Color( 60, 60, 60, 255*0.9 ) )
- if input.IsKeyDown( KEY_F4 ) and CurTime() > self.OpenCT then
- self:Close()
- end
- end
- function PANEL:GetActiveTab()
- return self.ActiveTab
- end
- function PANEL:SetTab( TabPanel )
- if IsValid( self:GetActiveTab() ) and IsValid( self:GetActiveTab():GetPanel() ) then
- self:GetActiveTab():GetPanel():SetVisible( false )
- end
- self.ActiveTab = TabPanel
- local npanel = self:GetActiveTab():GetPanel()
- if IsValid( npanel ) then
- npanel:SetVisible(true)
- npanel:SetSize( npanel:GetParent():GetSize() )
- npanel:MoveToFront()
- if npanel.OnSwitchedTo then npanel.OnSwitchedTo( npanel ) end
- self.TabSheet.ActivePanel = npanel
- end
- end
- function PANEL:AddTab( name, panel )
- local tab = self.Tabholder:Add( "F4MenuTab" )
- tab:SetPanel( panel )
- tab:SetTabHolder( self.Tabholder )
- tab:SetText( name )
- self.Items[ name ] = { tab, panel }
- panel:SetParent( self.TabSheet )
- if self:GetActiveTab() ~= nil then
- panel:SetVisible(false)
- else
- self:SetTab(tab)
- end
- return self.Items[name]
- end
- function PANEL:Close()
- self:SetVisible(false)
- end
- vgui.Register( 'F4MenuFrame', PANEL, 'DFrame' )
- end
- do
- local PANEL = {}
- function PANEL:Init()
- local vbar = self.VBar
- vbar:SetWide(10)
- end
- vgui.Register( 'DF4Scroll', PANEL, 'DScrollPanel' )
- end
- local gradient = Material( 'gui/gradient' )
- do
- local PANEL = {}
- function PANEL:Init()
- self:Dock(TOP)
- self:SetTall(24)
- self.CatData = {
- name = "Error",
- color = Color(0,0,0)
- }
- end
- function PANEL:Paint(w,h)
- draw.RoundedBox( 0, 0, 0, w, h, self.CatData.color)
- draw.DrawText( self.CatData.name, "GModNotify", 2, 2, Color(255,255,255) )
- end
- function PANEL:SetCategory(catID, catData)
- self.CatData = catData
- end
- vgui.Register( "F4JobCategorySplit", PANEL, "EditablePanel")
- end
- do
- local function canGetJob(job)
- local ply = LocalPlayer()
- if isnumber(job.NeedToChangeFrom) and ply:Team() ~= job.NeedToChangeFrom then return false, true end
- if istable(job.NeedToChangeFrom) and not table.HasValue(job.NeedToChangeFrom, ply:Team()) then return false, true end
- if job.customCheck and not job.customCheck(ply) then return false, true end
- if ply:Team() == job.team then return false, true end
- 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
- if job.admin == 1 and not ply:IsAdmin() then return false, true end
- if job.admin > 1 and not ply:IsSuperAdmin() then return false, true end
- return true
- end
- local function getMaxOfTeam(job)
- if not job.max or job.max == 0 then return "∞" end
- if job.max % 1 == 0 then return tostring(job.max) end
- return tostring(math.floor(job.max * #player.GetAll()))
- end
- local function reqvote(job)
- return job.vote and (not job.RequiresVote or job.RequiresVote( LocalPlayer(), job.team ))
- end
- local function become(job, model)
- local vote = reqvote(job)
- 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
- end
- local PANEL = {}
- function PANEL:Init()
- local actual_job
- self.JobPanel = self:Add("EditablePanel")
- self.JobPanel:Dock( RIGHT )
- self.JobPanel:DockMargin( 2, 0, 0, 0 )
- self.JobPanel:SetWide(300)
- self.JobLabel = self.JobPanel:Add( "DLabel" )
- self.JobLabel:Dock(TOP)
- self.JobLabel:SetFont('GModNotify')
- self.JobLabel:SetContentAlignment(5)
- self.BecomeButton = self.JobPanel:Add( "DButton" )
- self.BecomeButton:Dock(BOTTOM)
- self.BecomeButton:SetTall(28)
- self.BecomeButton:SetText('Устроиться')
- self.BecomeButton:SetFont( 'GModNotify')
- self.BecomeButton:SetColor(Color(255,255,255))
- self.BecomeButton.Paint = function( self, w, h )
- draw.RoundedBox( 6, 0, 0, w, h, Color(100,100,100))
- end
- self.BecomeButton.DoClick = function()
- if not actual_job then return end
- if istable( actual_job.model ) then
- local menu = vgui.Create('DFrame')
- menu:SetSize(400, 300)
- menu:SetTitle('ModelSelection')
- menu:Center()
- menu:MakePopup()
- menu:SetSkin('DarkRP')
- local lst = menu:Add( "DScrollPanel" )
- lst:Dock(FILL)
- local models = lst:Add( "DIconLayout" )
- models:Dock(FILL)
- models:SetSpaceX(2)
- models:SetSpaceY(2)
- for k,v in pairs(actual_job.model) do
- local mdl = models:Add( 'SpawnIcon' )
- mdl:SetModel(v)
- mdl:SetSize(42,42)
- mdl.DoClick = function() become( actual_job, v )() menu:Close() end
- end
- --error(1)
- else
- pcall( become(actual_job) )
- end
- end
- self.JobDescScroll = self.JobPanel:Add( "DF4Scroll" )
- self.JobDescScroll:Dock(BOTTOM)
- self.JobDescScroll:SetTall(200)
- self.JobDescScroll.Paint = function(_,w,h)
- draw.RoundedBox( 0, 0, 0, w, h, Color(80,80,80) )
- end
- self.JobDescScroll:DockMargin(0, 0, 0, 2)
- self.JobDesc = self.JobDescScroll:Add( "DLabel" )
- self.JobDesc:SetPos(1,1)
- self.JobDesc:SizeToContents()
- self.JobDesc:SetContentAlignment(7)
- self.JobPreview = self.JobPanel:Add("DModelPanel")
- self.JobPreview:Dock( FILL )
- self.JobPreview:DockMargin( 2, 0, 0, 0 )
- self.JobPreview:SetCamPos(Vector(50,20,50))
- function self.JobPreview:LayoutEntity( Entity ) return end
- local function PlayPreviewAnimation( panel )
- if ( !panel or !IsValid( panel.Entity ) ) then return end
- local anims = { 'pose_standing_01', 'idle_all', 'pose_standing_02' }
- --PrintTable( panel.Entity:GetSequenceList() )
- local anim = table.Random(anims)
- local iSeq = panel.Entity:LookupSequence( anim )
- if ( iSeq > 0 ) then panel.Entity:SetSequence( iSeq ) end
- end
- self.JobList = self:Add( "DF4Scroll" )
- self.JobList:Dock( FILL )
- local function model( job )
- return istable( job.model ) and table.Random(job.model) or job.model
- end
- local function setjob( job )
- self.JobPreview:SetModel( model(job) )
- local ent = self.JobPreview:GetEntity()
- local mdl = self.JobPreview
- self.JobLabel:SetText( job.name )
- local desc = DarkRP.textWrap( job.description or "Нет описания", self.JobDesc:GetFont(), 298 )
- self.JobDesc:SetText( desc )
- self.JobDesc:SizeToContents()
- self.BecomeButton:SetText( reqvote(job) == true and 'Создать голосование' or 'Устроиться')
- print(reqvote(job))
- self.JobDescScroll:SetTall( math.Clamp( self.JobDesc:GetTall(), 0, 200 ) + 2 )
- timer.Simple( .1, function()
- if IsValid( self.JobPreview ) then PlayPreviewAnimation( self.JobPreview ) end
- end)
- actual_job = job
- end
- local rad_lerp = 0
- for categoryName, cat in pairs( DarkRP.getCategories().jobs ) do
- local category = self.JobList:Add("F4JobCategorySplit")
- category:SetCategory(categoryName, cat)
- for jobID, jobTable in pairs( cat.members ) do
- local color = jobTable.color
- local base = self.JobList:Add( "EditablePanel" )
- base:Dock(TOP)
- base:DockMargin(0,0,0,2)
- base:SetTall(55)
- base.Paint = function( self, w, h )
- draw.RoundedBox( 0, 0, 0, w, h, Color(80,80,80) )
- if self.Rad then
- surface.SetMaterial( gradient )
- surface.SetDrawColor( color.r, color.g, color.b, rad_lerp * 255)
- surface.DrawTexturedRect(0,0,400,h)
- rad_lerp = Lerp( 0.03, rad_lerp, 1 )
- end
- draw.DrawText( jobTable.name, 'GModNotify', 65, 18, Color( 255,255,255 ))
- draw.DrawText( team.NumPlayers( jobTable.team ) .. '/' .. getMaxOfTeam( jobTable ), 'GModNotify', w - 10, 18, Color( 255,255,255 ),TEXT_ALIGN_RIGHT)
- if not canGetJob(jobTable) then
- draw.RoundedBox( 0, 0, 0, w, h, Color(255,54,54,10))
- end
- end
- local jobico = base:Add("SpawnIcon")
- jobico:Dock( LEFT )
- jobico:DockMargin(2,2,2,2)
- jobico:SetPos(2, 2)
- jobico:SetSize(51,51)
- jobico:SetModel( model(jobTable) )
- local jobBtn = base:Add( "DButton" )
- jobBtn:Dock(FILL)
- jobBtn:SetText("")
- jobBtn.Paint = nil
- jobBtn.OnCursorEntered = function(self)
- base.Rad = true
- rad_lerp = 0
- end
- jobBtn.OnCursorExited = function(self)
- base.Rad = nil
- rad_lerp = 0
- end
- jobBtn.DoClick = function()
- setjob(jobTable)
- surface.PlaySound("")
- end
- if not actual_job then
- setjob(jobTable)
- end
- end
- end
- end
- vgui.Register( 'F4Jobs', PANEL, 'EditablePanel' )
- end
- do
- local buyFunction = function(data)
- local name = data.name
- return function()
- RunConsoleCommand( "darkrp", "buyshipment", name )
- end
- end
- local buyWeapon = function(ent)
- for k,v in pairs(CustomShipments) do
- if v.entity == ent then
- return Derma_Query( "Вы действительно хотите купить " .. v.name .. "?", "Подтверждение покупки", string.format("Да (%s)", DarkRP.formatMoney(v.price)), buyFunction(v), "Нет", function() end )
- end
- end
- end
- do
- local PANEL = {}
- function PANEL:Init()
- self:SetSize(180,220)
- self.Alpha = 0
- end
- function PANEL:Paint(w,h)
- draw.RoundedBox(0,0,0,w,h,Color(60,60,60,255))
- if self.Material then
- surface.SetMaterial( self.Material )
- surface.SetDrawColor(255,255,255)
- surface.DrawTexturedRect(w/2-40,w/2-40,80,80)
- end
- if self:IsHovered() then
- self.Alpha = Lerp(FrameTime()*2, self.Alpha, 100)
- draw.RoundedBox(0,0,0,w,h,Color(0,0,0,self.Alpha))
- local text = DarkRP.textWrap( self.ItemData.name, "GModNotify", w-50 )
- local pricetext = string.format( "Купить (%s)", DarkRP.formatMoney(self.ItemData.price) )
- draw.DrawText(text , "GModNotify", w/2, 30, Color(255,255,255), 1)
- local t1w,t1h = surface.GetTextSize(text)
- local t2w,t2h = surface.GetTextSize(pricetext)
- t2w = t2w + 10
- draw.RoundedBox( 0, w/2 - t2w/2, h-t2h-10, t2w, t2h, Color(200,120,0) )
- draw.DrawText( pricetext, "GModNotify", w/2, h-t2h-10, Color(255,255,255), 1)
- self:SetCursor("hand")
- else
- self.Alpha = 0
- self:SetCursor('none')
- draw.DrawText(DarkRP.textWrap( self.ItemData.name, "GModNotify", w-50 ) , "GModNotify", w/2, 160, Color(255,255,255), 1)
- end
- end
- function PANEL:SetDarkRPItem(item, data)
- self.ItemID = item
- self.ItemData = data
- self.Material = Material("VGUI/entities/" .. data.entity)
- end
- function PANEL:OnMousePressed()
- return buyWeapon(self.ItemData.entity)
- end
- vgui.Register( "F4WeaponsInfo", PANEL, "EditablePanel")
- end
- do
- local PANEL = {}
- function PANEL:Init()
- self:Dock(FILL)
- self.TabScroll = self:Add("EditablePanel")
- self.TabScroll:Dock(TOP)
- self.TabScroll:SetTall(30)
- self.TabScroll.Loaded = true
- function self.TabScroll.Paint(_,w,h)
- draw.RoundedBox(0,0,0,w,h,Color(80,80,80))
- end
- local wscroll = self:Add("DF4Scroll")
- wscroll:Dock(FILL)
- self.WeaponList = wscroll:Add("DIconLayout")
- self.WeaponList:Dock(FILL)
- self.WeaponList:SetSpaceX(5)
- self.WeaponList:SetSpaceY(5)
- end
- function PANEL:LoadTabs(activeTab)
- self.TabScroll :Clear()
- self.WeaponList:Clear()
- local back = self.TabScroll:Add("DButton")
- back:Dock(LEFT)
- back:SetWide(30)
- back:SetText("")
- back.Paint = function(_,w,h)
- surface.SetDrawColor(255,255,255)
- surface.DrawLine(10, 4, 3, h/2)
- surface.DrawLine(3, h/2, 10, h-4)
- end
- back.DoClick = function()
- local parent = self:GetParent()
- parent:Clear()
- parent:Add("F4Weapons"):Dock(FILL)
- end
- local cnt = #DarkRP.getCategories().shipments
- for k,v in pairs(DarkRP.getCategories().shipments) do
- local tabButton = self.TabScroll:Add("DButton")
- tabButton:SetText("")
- tabButton:Dock(LEFT)
- tabButton:DockMargin(1,0,1,0)
- tabButton.Paint = function(tab, w, h)
- local tab_wide = ((self.TabScroll:GetWide() - 30) - ( cnt * 2 )) / cnt
- tab:SetWide(tab_wide)
- draw.SimpleText( v.name , "GModNotify", 2, h/2, Color(255,255,255), 0, 1)
- if activeTab == v.name then
- draw.RoundedBox(0,0,0,w,h,Color(255,120,0,15))
- end
- surface.SetDrawColor(60,60,60)
- surface.DrawOutlinedRect(0,0,w,h)
- end
- tabButton.DoClick = function()
- self:LoadTabs(v.name)
- end
- if activeTab == v.name then
- for k,v in pairs(v.members) do
- local weaponInfo = self.WeaponList:Add("F4WeaponsInfo")
- weaponInfo:SetDarkRPItem(v.entity, v)
- end
- end
- end
- end
- vgui.Register("F4WeaponsFullList", PANEL, "EditablePanel")
- end
- do
- local PANEL = {}
- function PANEL:Init()
- self:SetTall(40)
- self:SetCursor("hand")
- self:SetText("")
- end
- function PANEL:Paint(w,h)
- if self.Material then
- surface.SetMaterial(self.Material)
- surface.SetDrawColor(255,255,255)
- surface.DrawTexturedRect((w - w/2) - (h/2),0,h,h)
- else
- draw.SimpleText( "<corrupt icon>", "DermaDefault", w/2, h/2, Color(255,255,255), 1, 1)
- end
- if self:IsHovered() then
- draw.RoundedBox( 0, 0, 0, w, h, Color(0,0,0,140))
- draw.DrawText(DarkRP.textWrap(self.ItemData.name, "DermaDefault", w-10), "DermaDefault", w/2, 5, Color(255,255,255), 1)
- end
- surface.SetDrawColor(80,80,80)
- surface.DrawOutlinedRect(0,0,w,h)
- end
- function PANEL:SetItem(a, v)
- self.Material = Material("VGUI/entities/" .. (v.entity))
- self.ItemID = v.cmd
- self.ItemData = v
- self:SetTooltip("Нажмите чтобы купить " .. "(" .. DarkRP.formatMoney(self.ItemData.price) .. ")")
- end
- function PANEL:DoClick()
- if self.ItemData then
- buyWeapon(self.ItemData.entity)
- end
- end
- vgui.Register( "F4WeaponsFastItem", PANEL, "DButton")
- end
- do
- local PANEL = {}
- AccessorFunc( PANEL, "_AHAH_Nice_Meme", "ItemCount", FORCE_NUMBER)
- --local headerFormatNormal = "%s"
- --local headerFormatMany = "%s (%d Items more)"
- function PANEL:Init()
- self:SetTall(24)
- self:Dock(TOP)
- self:DockMargin(0,0,0,4)
- local header = self:Add("DButton")
- header:Dock(TOP)
- header:SetTall(24)
- header:SetText("")
- header.Paint = function(_,w,h)
- draw.RoundedBox(0,0,0,w,h,Color(80,80,80))
- draw.DrawText( self.Category.name, "GModNotify", 5, 2, Color(255,255,255))
- surface.SetDrawColor(255,255,255)
- if self:GetItemCount() > 5 then
- draw.DrawText( "(" .. self:GetItemCount() - 5 .. " Items more)", "GModNotify", w-20, 2, Color(255,255,255), TEXT_ALIGN_RIGHT)
- end
- if self:GetItemCount() > 0 then
- surface.DrawLine(w-12, 4, w-7, h/2)
- surface.DrawLine(w-7, h/2, w-12, h-4)
- end
- end
- header.DoClick = function()
- local parent = self:GetParent()
- parent:Clear()
- parent:Add("F4WeaponsFullList"):LoadTabs(self.Category.name)
- end
- self.Items = {}
- self.ItemScroll = self:Add( "DIconLayout" )
- self.ItemScroll:Dock(FILL)
- self.ItemScroll:DockMargin(2,2,2,2)
- self.ItemScroll:SetSpaceX(5)
- self.ItemScroll:SetSpaceY(0)
- self:SetItemCount(0)
- end
- function PANEL:Paint(w,h)
- draw.RoundedBox(0,0,0,w,h,Color(60,60,60))
- end
- function PANEL:AddItem(item, v)
- self:SetTall(70)
- if self:GetItemCount() < 5 then
- local fitem = self.ItemScroll:Add("F4WeaponsFastItem")
- fitem:SetItem(item, v)
- end
- table.insert(self.Items, item)
- self:SetItemCount( self:GetItemCount() + 1 )
- end
- function PANEL:SetCategory(shipments, cat)
- local data = shipments[cat]
- self.Category = data
- for k,v in pairs(data.members) do
- self:AddItem(k, v)
- end
- end
- vgui.Register( 'F4WeaponsCategory', PANEL, 'EditablePanel' )
- end
- do
- local PANEL = {}
- function PANEL:Init()
- self.WeaponList = self:Add( "DF4Scroll" )
- self.WeaponList:Dock( FILL )
- self:BuildPanels()
- end
- function PANEL:BuildPanels()
- local shipment_cat = DarkRP.getCategories().shipments
- for k,v in pairs(shipment_cat) do
- local aaa = self.WeaponList:Add("F4WeaponsCategory")
- aaa:SetCategory(shipment_cat, k)
- end
- end
- vgui.Register( 'F4Weapons', PANEL, 'EditablePanel' )
- end
- end
- do
- do
- local PANEL = {}
- function PANEL:Init()
- self:Dock(TOP)
- self:DockMargin(0,1,0,0)
- self:SetTall(50)
- self.Icon = self:Add("SpawnIcon")
- self.Icon:Dock(LEFT)
- self.Icon:DockMargin(2,2,2,2)
- self.Icon:SetWide(46)
- self.Buy = self:Add("DButton")
- self.Buy:Dock(RIGHT)
- self.Buy:SetWide(120)
- self.Buy:DockMargin(0,10,24,10)
- end
- function PANEL:Paint(w,h)
- draw.RoundedBox(0,0,0,w,h,Color(60,60,60))
- draw.DrawText(self.Item.name, "GModNotify", 60, 5, Color(255,255,255))
- draw.DrawText( "Энергия:", "DermaDefault", 60, 33, Color(255,255,255))
- local val = math.Clamp( self.Item.energy/100, 0, 1)
- draw.RoundedBox(0,110,35,100,12,Color(0,0,0,50))
- draw.RoundedBox(0,110,35,100 * val,12,HSVToColor(self.Item.energy * 1.7, 1, 1))
- draw.DrawText( self.Item.energy .. '%', "DermaDefault", 112, 34, Color(60,60,60), TEXT_ALIGN_LEFT )
- end
- function PANEL:SetFood(food)
- self.Icon:SetModel(food.model)
- self.Item = food
- self.Buy:SetText( string.format( "Купить (%s)", DarkRP.formatMoney(self.Item.price)) )
- self.Buy.DoClick = function()
- RunConsoleCommand( "darkrp", "buyfood", self.Item.name)
- end
- end
- vgui.Register( "F4FoodItem", PANEL, "EditablePanel")
- end
- do
- local PANEL = {}
- function PANEL:Init()
- self:Dock(FILL)
- self.Header = self:Add("EditablePanel")
- self.Header:Dock(TOP)
- self.Header:SetTall(28)
- self.Header.Paint = function(_, w, h)
- draw.RoundedBox( 0, 0, 0, w, h, Color(60,60,60))
- draw.DrawText( "Категорий еды нет, но вы держитесь! ty falco", "GModNotify", 2, 2, Color(255,255,255) )
- end
- self.Scroll = self:Add("DF4Scroll")
- self.Scroll:Dock(FILL)
- self:UpdateFoodItems()
- end
- function PANEL:UpdateFoodItems()
- self.Scroll:Clear()
- for k,v in pairs(FoodItems) do
- local item = self.Scroll:Add("F4FoodItem")
- item:SetFood(v)
- end
- end
- vgui.Register( "F4Food", PANEL, "EditablePanel")
- end
- end
- do
- local function canBuyEntity(item)
- local ply = LocalPlayer()
- if istable(item.allowed) and not table.HasValue(item.allowed, ply:Team()) then return false, true end
- if item.customCheck and not item.customCheck(ply) then return false, true end
- local canbuy, suppress, message, price = hook.Call("canBuyCustomEntity", nil, ply, item)
- local cost = price or item.getPrice and item.getPrice(ply, item.price) or item.price
- if not ply:canAfford(cost) then return false, false, message, cost end
- if canbuy == false then
- return false, suppress, message, cost
- end
- return true, nil, message, cost
- end
- local PANEL = {}
- function PANEL:Init()
- self.WeaponList = self:Add( "DF4Scroll" )
- self.WeaponList:Dock( FILL )
- for EntityID, Entity in pairs( DarkRPEntities ) do
- local ply = LocalPlayer()
- local ship = Entity
- local cost = ship.getPrice and ship.getPrice(ply, ship.price) or ship.price
- local base = self.WeaponList:Add( "EditablePanel" )
- base:Dock(TOP)
- base:DockMargin(0,0,0,2)
- base:SetTall(55)
- base.Paint = function( self, w, h )
- draw.RoundedBox( 0, 0, 0, w, h, Color(80,80,80) )
- local canBuy = canBuyEntity( ship )
- if self.Rad and canBuy then
- surface.SetMaterial( gradient )
- surface.SetDrawColor( 54, 200, 54, rad_lerp * 255)
- surface.DrawTexturedRect(0,0,400,h)
- rad_lerp = Lerp( 0.03, rad_lerp, 1 )
- end
- draw.DrawText( ship.name, 'GModNotify', 65, 18, Color( 255,255,255 ))
- if not canBuy then
- draw.RoundedBox( 0, 0, 0, w, h, Color(255,54,54,10))
- end
- end
- local swepico = base:Add("SpawnIcon")
- swepico:Dock( LEFT )
- swepico:DockMargin(2,2,2,2)
- swepico:SetPos(2, 2)
- swepico:SetSize(51,51)
- swepico:SetModel( ship.model )
- local wepBtn = base:Add( "DButton" )
- wepBtn:Dock(FILL)
- wepBtn:SetText("")
- wepBtn.Paint = nil
- wepBtn.OnCursorEntered = function(self)
- base.Rad = true
- rad_lerp = 0
- end
- wepBtn.OnCursorExited = function(self)
- base.Rad = nil
- rad_lerp = 0
- end
- local buyBtn = base:Add( "DButton" )
- buyBtn:Dock(RIGHT)
- buyBtn:DockMargin( 0, 5, 10, 5 )
- buyBtn:SetWide(200)
- buyBtn:SetText(string.format( 'Купить (%s)', DarkRP.formatMoney( cost ) ))
- buyBtn:SetFont('GModNotify')
- buyBtn.DoClick = function()
- RunConsoleCommand( 'darkrp', ship.cmd )
- end
- end
- end
- vgui.Register( 'F4Entities', PANEL, 'EditablePanel' )
- end
- local bell = Material("icon16/bell.png")
- do
- local function canBuyAmmo(item)
- local ply = LocalPlayer()
- if item.customCheck and not item.customCheck(ply) then return false, true end
- local canbuy, suppress, message, price = hook.Call("canBuyAmmo", nil, ply, item)
- local cost = price or item.getPrice and item.getPrice(ply, item.price) or item.price
- if not ply:canAfford(cost) then return false, false, message, cost end
- if canbuy == false then
- return false, suppress, message, price
- end
- return true, nil, message, price
- end
- local PANEL = {}
- function PANEL:Init()
- self.WeaponList = self:Add( "DF4Scroll" )
- self.WeaponList:Dock( FILL )
- for AmmoID, Ammo in pairs( GAMEMODE.AmmoTypes ) do
- local ply = LocalPlayer()
- local ship = Ammo
- local cost = ship.getPrice and ship.getPrice(ply, ship.price) or ship.price
- local base = self.WeaponList:Add( "EditablePanel" )
- base:Dock(TOP)
- base:DockMargin(0,0,0,2)
- base:SetTall(55)
- base.Paint = function( self, w, h )
- draw.RoundedBox( 0, 0, 0, w, h, Color(80,80,80) )
- local canBuy = canBuyAmmo( ship )
- if self.Rad and canBuy then
- surface.SetMaterial( gradient )
- surface.SetDrawColor( 54, 200, 54, rad_lerp * 255)
- surface.DrawTexturedRect(0,0,400,h)
- rad_lerp = Lerp( 0.03, rad_lerp, 1 )
- end
- draw.DrawText( ship.name, 'GModNotify', 65, 18, Color( 255,255,255 ))
- if not canBuy then
- draw.RoundedBox( 0, 0, 0, w, h, Color(255,54,54,10))
- end
- end
- local swepico = base:Add("SpawnIcon")
- swepico:Dock( LEFT )
- swepico:DockMargin(2,2,2,2)
- swepico:SetPos(2, 2)
- swepico:SetSize(51,51)
- swepico:SetModel( ship.model )
- local wepBtn = base:Add( "DButton" )
- wepBtn:Dock(FILL)
- wepBtn:SetText("")
- wepBtn.Paint = nil
- wepBtn.OnCursorEntered = function(self)
- base.Rad = true
- rad_lerp = 0
- end
- wepBtn.OnCursorExited = function(self)
- base.Rad = nil
- rad_lerp = 0
- end
- local buyBtn = base:Add( "DButton" )
- buyBtn:Dock(RIGHT)
- buyBtn:DockMargin( 0, 5, 10, 5 )
- buyBtn:SetWide(200)
- buyBtn:SetText(string.format( 'Купить (%s)', DarkRP.formatMoney( cost ) ))
- buyBtn:SetFont('GModNotify')
- buyBtn.DoClick = function()
- RunConsoleCommand( 'darkrp', 'buyammo', ship.id )
- end
- end
- end
- vgui.Register( 'F4Ammo', PANEL, 'EditablePanel' )
- end
- do
- local PANEL = {}
- function PANEL:Init()
- return
- end
- function PANEL:OnSwitchedTo()
- self:Clear()
- self.Update = true
- self.JobRelation = self:Add( "EditablePanel" )
- self.JobRelation:Dock( BOTTOM )
- self.JobRelation:DockMargin(2,2,2,2)
- self.JobRelation:DockPadding(15,30,15,20)
- self.JobRelation:SetTall(100)
- self.JobRelation.Paint = function(self,w,h)
- draw.RoundedBox( 0, 0, 0, w, h, Color(60,60,60,140))
- draw.DrawText( 'График работ', 'DermaDefault', 8, 5, Color(255,255,255) )
- surface.SetDrawColor(255,255,255)
- surface.DrawOutlinedRect(0,0,w,h)
- end
- self.JobRelationButtons = self.JobRelation:Add( "EditablePanel" )
- self.JobRelationButtons:Dock(FILL)
- self.Stats = self:Add( "DPanel" )
- self.Stats:Dock(FILL)
- self.Stats:DockMargin( 2, 2, 2, 2 )
- self.Stats.Paint = function( self, w, h )
- draw.DrawText( 'Статистика', 'DermaDefault', 5, 5, Color(255,255,255) )
- draw.SimpleText( "Игроки:", "default", 20, 85, Color( 255, 255, 255 ) )
- draw.SimpleText( #player.GetAll().." онлайн", "default", 92, 105, Color( 255, 255, 255 ) )
- draw.SimpleText( GetConVarNumber( "maxplayers" ).." слотов", "default", 92, 120, Color( 255, 255, 255 ) )
- local maxBase = 0
- local money = 0
- local jobs = {}
- for k, v in pairs( player.GetAll() ) do
- local vMoney = v:getDarkRPVar( "money" ) or 0
- money = money + vMoney
- end
- local mTable = {}
- for k, v in pairs( player.GetAll() ) do
- table.insert( mTable, { ply = v, money = v:getDarkRPVar( "money" ) or 0 } )
- end
- table.SortByMember( mTable, "money" )
- local first = table.GetFirstValue( mTable )
- draw.SimpleText( "Экономика:", "default", 20, 170, Color( 255, 255, 255 ) )
- local tMoney = string.Comma(math.ceil(money)) or "Error Loading"
- local highMoney = string.Comma(math.ceil( first.money )) or "Error Loading"
- draw.SimpleText( "$"..tMoney.." денег на сервере", "default", 92, 187, Color( 255, 255, 255 ) )
- draw.SimpleText( "$"..highMoney.." самый богатый", "default", 92, 204, Color( 255, 255, 255 ) )
- draw.SimpleText( "- "..string.upper(first.ply:Nick()), "default", 92, 220, Color( 255, 255, 255 ) )
- draw.SimpleText( "Контакты:", "default", 20, 250, Color( 255, 255, 255 ) )
- surface.SetDrawColor( Color( 255, 255, 255 ) )
- surface.DrawLine( 24, 68, w - 24, 68 )
- surface.DrawLine( 24, 104, w - 24, 104 )
- surface.DrawLine( 24, 186, w - 24, 186 )
- surface.DrawLine( 24, 270, w - 24, 270 )
- surface.DrawLine( 84, 70, 84, self:GetTall() - 44 )
- surface.SetDrawColor(255,255,255)
- surface.DrawOutlinedRect(0,0,w,h)
- end
- do
- local function profile(sid64)
- return function()
- gui.OpenURL('http://steamcommunity.com/id/'..sid64)
- end
- end
- local btn2 = self.Stats:Add("DButton")
- btn2:SetPos( 89, 275)
- btn2:SetSize(120,24)
- btn2:SetText( "AppleJeb" )
- btn2:SetTooltip('Основатель/Кодер')
- btn2.DoClick = profile('applejeb')
- end
- local teamsorted, sized = {}, {}
- for k,v in ipairs( player.GetAll() ) do
- teamsorted[v:Team()] = teamsorted[v:Team()] or {}
- table.insert( teamsorted[v:Team()], v )
- end
- for k,v in pairs(teamsorted) do
- local val = team.NumPlayers(k) / #player.GetAll()
- local job = self.JobRelationButtons:Add( "DButton" )
- job:Dock(LEFT)
- job:SetText("")
- job:SetTooltip(team.GetName(k))
- job.Paint = function(self, rw, rh)
- draw.RoundedBox( 0, 0, 0, rw, rh, team.GetColor(k) )
- surface.SetDrawColor(255,255,255)
- surface.DrawOutlinedRect(0,0,rw,rh)
- end
- job.Think = function(self)
- local parent = self:GetParent()
- local wanted_size = val * parent:GetWide()
- self:SetSize(wanted_size, parent:GetTall())
- end
- job.DoClick = function()
- local m = DermaMenu()
- for k, v in pairs(v) do
- if IsValid(v) then
- m:AddOption( v:GetName(), function()
- gui.OpenURL( 'http://steamid.io/lookup/'..v:SteamID64() )
- end)
- end
- end
- m:Open()
- RegisterDermaMenuForClose(m)
- end
- end
- self.AdminBG = self:Add( "EditablePanel" )
- self.AdminBG:Dock( LEFT )
- self.AdminBG:DockMargin(2,2,0,2)
- self.AdminBG:DockPadding(2,24,2,2)
- self.AdminBG:SetWide( 200 )
- self.AdminBG.PaintOver = function( self, w, h )
- surface.SetDrawColor(255,255,255)
- surface.DrawOutlinedRect(0,0,w,h)
- draw.DrawText( 'Админы онлайн', 'DermaDefault', 5, 5, Color(255,255,255) )
- end
- self.AdminList = self.AdminBG:Add( "DF4Scroll" )
- self.AdminList:Dock(FILL)
- do
- local plys = player.GetAll()
- local immunityWorkaround = {
- ["user"] = 0,
- ["vip"] = 10,
- ["moderator"] = 20,
- ["admin"] = 30,
- ["admin+"] = 40,
- ["superadmin+"] = 75,
- ["owner"] = 80,
- ["guardian"] = 90,
- ["superadmin"] = 100,
- ["waifu"] = 100,
- }
- local function getimmunity(group)
- return immunityWorkaround[group] or 0
- --return (FAdmin and FAdmin.Access and FAdmin.Access.Groups) and ( FAdmin.Access.Groups[group] and FAdmin.Access.Groups[group].immunity or 0 ) or 0
- end
- table.sort( plys, function(f,l)
- return getimmunity(f:GetUserGroup()) > getimmunity(l:GetUserGroup())
- end)
- for k,v in pairs( plys ) do
- if v:GetUserGroup() == 'user' or v:GetUserGroup() == 'noaccess' or v:GetUserGroup() == 'vip' then continue end
- local admin = self.AdminList:Add( "EditablePanel" )
- admin:Dock(TOP)
- admin:DockMargin( 0, 0, 0, 2 )
- admin:SetTall(30)
- local avatar = admin:Add( "AvatarImage" )
- avatar:Dock(LEFT)
- avatar:DockMargin(1,1,1,1)
- avatar:SetWide(28)
- avatar:SetPlayer(v)
- local label = admin:Add( "DLabel" )
- label:SetPos( 35, 3 )
- label:SetSize(160, 16)
- label:SetColor(Color(255,255,255))
- label:SetText(v:GetName())
- label:SetFont("HUDSELECTIONTEXT")
- local rank = admin:Add( "DLabel" )
- rank:SetPos( 35, 15 )
- rank:SetSize(160, 16)
- rank:SetColor(HSVToColor(360*(getimmunity(v:GetUserGroup())/100), 1, 1))
- rank:SetText(v:GetUserGroup())
- local call = admin:Add( "DButton" )
- call:Dock(RIGHT)
- call:SetWide(30)
- call:SetText("")
- call.PaintOver = function(_,w,h)
- surface.SetMaterial( bell )
- surface.SetDrawColor(255,255,255)
- surface.DrawTexturedRect(w/2 - 8,w/2 - 8,16,16)
- end
- call.DoClick = function()
- RunConsoleCommand('darkrp', 'calladmin', v:UserID())
- end
- end
- end
- end
- vgui.Register( 'F4Main', PANEL, 'EditablePanel' )
- end
- F4.Starting = false
- F4.ToggleMenu = function()
- if F4.Starting then
- return
- end
- if IsValid( F4.MenuFrame ) then
- if F4.MenuFrame:IsVisible() then
- F4.MenuFrame:Close()
- else
- F4.MenuFrame:SetAlpha(0)
- F4.MenuFrame:SetVisible(true)
- F4.MenuFrame:AlphaTo(255,0.2)
- F4.MenuFrame.OpenCT = CurTime() + 0.6
- local tab = F4.MenuFrame:GetActiveTab():GetPanel()
- if IsValid(tab) and tab.OnSwitchedTo then
- tab.OnSwitchedTo(tab)
- end
- end
- return false
- end
- timer.Simple( 1, function()
- F4.MenuFrame = vgui.Create( 'F4MenuFrame' )
- F4.MenuFrame:AddTab( 'CakeRP', vgui.Create( 'F4Main') )
- F4.MenuFrame:AddTab( 'Профессии', vgui.Create( 'F4Jobs') )
- F4.MenuFrame:AddTab( 'Оружие', vgui.Create( 'F4Weapons') )
- F4.MenuFrame:AddTab( 'Hello, food?', vgui.Create( 'F4Food') )
- F4.MenuFrame:AddTab( 'Предметы', vgui.Create( 'F4Entities') )
- F4.MenuFrame:AddTab( 'Патроны', vgui.Create( 'F4Ammo') )
- if cookie.GetString('zdarova', nil) ~= 'yes' then
- cookie.Set( 'zdarova', 'yes' )
- print('yes')
- local note = F4.MenuFrame:Add( "EditablePanel" )
- note:SetPos(0,0)
- note:SetSize(F4.MenuFrame:GetSize())
- note.curtime = CurTime() + 2
- note.zdarova_lerp = 0
- note.Paint = function(_,w,h)
- draw.RoundedBox( 0, 0, 0, w, h, Color(60,60,60))
- draw.SimpleText( 'Встречайте!', 'default', w/2, h/2, HSVToColor( math.sin(CurTime()*0.1) * 360, 1, 1), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER )
- if CurTime() > _.curtime then
- _.zdarova_lerp = Lerp( 0.1, _.zdarova_lerp, 255 )
- draw.DrawText( 'Оригинальное F4 меню.\nСпециально для CakeRP', 'GModNotify', w/2, h/2 + 40, Color(170,170,170,_.zdarova_lerp), TEXT_ALIGN_CENTER )
- end
- end
- local close_note = note:Add( "DButton" )
- close_note:Dock( BOTTOM )
- close_note:SetText('Скрыть')
- close_note.DoClick = function()
- note:SizeTo( -1, 0, 0.3, 0, -1, function(_, self)
- self:Remove()
- end)
- end
- close_note:SetColor(Color(255,255,255))
- close_note.Paint = function(_,w,h)
- draw.RoundedBox( 0, 0, h-2, w, 2, Color(255,255,255))
- end
- end
- F4.Starting = false
- hook.Remove('HUDPaint', 'F4_Staring')
- end)
- hook.Add( 'HUDPaint', 'F4_Staring', function()
- draw.DrawText( 'Пожалуйста, подождите\nМеню F4 загружается. Если игра зависла подождите пару секунд\nНажатие клавиш во время загрузки может привести к крашу игры', 'GModNotify', 5, 5, Color(255,255,255))
- end)
- F4.Starting = true
- end
- timer.Create( "F4Override", 2, 0, function()
- GAMEMODE.ShowSpare2 = F4.ToggleMenu
- end )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement