Files
VnUtest/garrysmod/gamemodes/militaryrp/plugins/pause_menu/cl_plugin.lua
2026-03-31 10:27:04 +03:00

206 lines
6.7 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- Fonts for pause menu
surface.CreateFont("PauseMenuTitle", {
font = "Exo 2",
size = 73,
weight = 700,
extended = true
})
surface.CreateFont("PauseMenuButton", {
font = "Exo 2",
size = 35,
weight = 600,
extended = true
})
-- Materials
local bgMaterial = Material("materials/ft_ui/military/vnu/charcreate/bg.png", "smooth")
local logoMaterial = Material("materials/ft_ui/military/vnu/charcreate/logo.png", "smooth")
-- Main pause menu frame
local pauseMenu = nil
-- Create button function
local function CreateMenuButton(parent, text, x, y)
local btn = vgui.Create("DButton", parent)
btn:SetPos(x, y)
btn:SetSize(350, 66)
btn:SetText("")
btn.Paint = function(self, w, h)
-- Background with border
surface.SetDrawColor(13, 13, 13, 217) -- #0D0D0D with 85% opacity
draw.RoundedBox(10, 0, 0, w, h, Color(13, 13, 13, 217))
-- Border
surface.SetDrawColor(1, 67, 29, 255) -- #01431D
surface.DrawOutlinedRect(0, 0, w, h, 2)
-- Text centered
draw.SimpleText(text, "PauseMenuButton", w / 2, h / 2, Color(255, 255, 255, 255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
-- Hover effect
if self:IsHovered() then
surface.SetDrawColor(1, 104, 44, 30) -- #01682C with low opacity
draw.RoundedBox(10, 0, 0, w, h, Color(1, 104, 44, 30))
end
end
return btn
end
-- Create pause menu
local function CreatePauseMenu()
if IsValid(pauseMenu) then
pauseMenu:Remove()
return
end
pauseMenu = vgui.Create("DFrame")
pauseMenu:SetSize(ScrW(), ScrH())
pauseMenu:SetPos(0, 0)
pauseMenu:SetTitle("")
pauseMenu:SetDraggable(false)
pauseMenu:ShowCloseButton(false)
pauseMenu:MakePopup()
-- Закрытие меню по Esc
pauseMenu.OnKeyCodePressed = function(self, key)
if key == KEY_ESCAPE then
self:Close()
gui.HideGameUI()
return true
end
end
pauseMenu.Paint = function(self, w, h)
-- Background image
surface.SetDrawColor(255, 255, 255, 255)
surface.SetMaterial(bgMaterial)
surface.DrawTexturedRect(0, 0, w, h)
-- Dark overlay
surface.SetDrawColor(10, 10, 10, 140) -- rgba(10, 10, 10, 0.55)
surface.DrawRect(0, 0, w, h)
-- Top bar
surface.SetDrawColor(13, 13, 13, 255) -- #0D0D0D
surface.DrawRect(0, 0, w, 100)
-- Logo (centered at 885, 23 for 1920x1080)
local logoX = (w / 2) - 75 -- Center logo (150px width / 2)
local logoY = 23
surface.SetDrawColor(255, 255, 255, 255)
surface.SetMaterial(logoMaterial)
surface.DrawTexturedRect(logoX, logoY, 150, 53)
-- Title "Front Team" (767, 284)
local titleX = (w / 2) - 192 -- Approximate center for "Front Team"
local titleY = 284
--draw.SimpleText("Front Team", "PauseMenuTitle", titleX, titleY, Color(255, 255, 255, 255), TEXT_ALIGN_LEFT, TEXT_ALIGN_TOP)
end
-- Calculate center X position for buttons (785px for 1920px screen)
local centerX = (ScrW() / 2) - 175 -- 350px button width / 2
-- Button 1: Вернуться в игру (380px from top)
local btnReturn = CreateMenuButton(pauseMenu, "Вернуться в игру", centerX, 380)
btnReturn.DoClick = function()
pauseMenu:Close()
gui.HideGameUI()
end
-- Button 2: Правила (450px from top)
local btnRules = CreateMenuButton(pauseMenu, "Правила", centerX, 450)
btnRules.DoClick = function()
-- Open rules URL or show rules frame
gui.OpenURL("https://sites.google.com/view/frontteamsite/правила") -- Replace with actual URL
end
-- Button 3: Discord (520px from top)
local btnDiscord = CreateMenuButton(pauseMenu, "Discord", centerX, 520)
btnDiscord.DoClick = function()
-- Open Discord invite link
gui.OpenURL("https://discord.gg/paQdrP7aD7") -- Replace with actual Discord link
end
-- Button 4: Настройки (590px from top)
local btnSettings = CreateMenuButton(pauseMenu, "Настройки", centerX, 590)
btnSettings.DoClick = function()
if IsValid(pauseMenu) then
pauseMenu:Close()
end
gui.ActivateGameUI()
timer.Simple(0.1, function()
RunConsoleCommand("gamemenucommand", "openoptionsdialog")
end)
end
-- Button 6: Выйти с сервера (730px from top)
local btnDisconnect = CreateMenuButton(pauseMenu, "Выйти с сервера", centerX, 730)
btnDisconnect.DoClick = function()
RunConsoleCommand("disconnect")
end
-- Button 7: Config (800px from top) - только для superadmin
if LocalPlayer():IsSuperAdmin() then
local btnConfig = CreateMenuButton(pauseMenu, "Config", centerX, 800)
btnConfig.DoClick = function()
-- Создаем DFrame с конфигом Helix
local configFrame = vgui.Create("DFrame")
configFrame:SetSize(ScrW() * 0.8, ScrH() * 0.8)
configFrame:Center()
configFrame:SetTitle("Helix Config")
configFrame:MakePopup()
-- Создаем tabs панель
local tabs = configFrame:Add("DPropertySheet")
tabs:Dock(FILL)
-- Вкладка Config
local configPanel = vgui.Create("DPanel")
configPanel:Dock(FILL)
local configManager = configPanel:Add("ixConfigManager")
tabs:AddSheet("Config", configPanel, "icon16/cog.png")
-- Вкладка Plugins
local pluginsPanel = vgui.Create("DPanel")
pluginsPanel:Dock(FILL)
local pluginManager = pluginsPanel:Add("ixPluginManager")
ix.gui.pluginManager = pluginManager
tabs:AddSheet("Plugins", pluginsPanel, "icon16/plugin.png")
-- При закрытии фрейма убираем ссылку на pluginManager
configFrame.OnClose = function()
ix.gui.pluginManager = nil
end
end
end
return pauseMenu
end
-- Hook to show custom pause menu
hook.Add("OnPauseMenuShow", "ixShowCustomPauseMenu", function()
if IsValid(ix.plugin.list["f4menu"].f4Menu) then
ix.plugin.list["f4menu"].f4Menu:Remove()
return false
end
CreatePauseMenu()
return false -- Prevent default pause menu
end)
-- Console command to open pause menu (for testing)
concommand.Add("ix_pausemenu", function()
CreatePauseMenu()
end)