Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
misc
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zero
misc
Commits
94efb620
Commit
94efb620
authored
Oct 06, 2025
by
zero
🎱
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add new file
parent
dc3516d5
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
223 additions
and
0 deletions
+223
-0
cl menu del derma nuevo este
cl menu del derma nuevo este
+223
-0
No files found.
cl menu del derma nuevo este
0 → 100644
View file @
94efb620
--[[
© 2025 Gemin-AI para [El Nombre de tu Servidor]
FUNCIÓN:
Este es el corazón del plugin. Contiene todo el código Lua del lado del cliente
para dibujar la nueva interfaz. Anula la función que abre el menú de Helix
y la reemplaza por una propia que crea una ventana a pantalla completa con el
estilo de Battlefront. Gestiona la creación de pestañas, el cambio entre ellas
y, lo más importante, inserta los paneles originales de Helix (inventario,
personaje, etc.) dentro del nuevo diseño.
--]]
-- Almacenaremos nuestro panel principal en esta variable local para poder
-- comprobar si ya está abierto o no.
local vguiBattlefrontMenu
-- ---------------------------------------------------------------------------------
-- CONFIGURACIÓN DE ESTILO (Puedes modificar estos valores)
-- ---------------------------------------------------------------------------------
-- Paleta de colores para la interfaz.
local COLOR_BACKGROUND = Color(0, 0, 0, 225)
local COLOR_BLUE_HIGHLIGHT = Color(0, 170, 255, 255)
local COLOR_WHITE_TEXT = Color(240, 240, 240, 255)
local COLOR_GREY_TEXT = Color(180, 190, 200, 200)
local FONT_FAMILY = "Arial" -- Cambia esto por la fuente que prefieras (debe estar instalada o en el servidor).
-- Creación de las fuentes personalizadas que usará la interfaz.
surface.CreateFont("BF_Menu_Tab_Active", {
font = FONT_FAMILY,
extended = true,
size = 20,
weight = 700,
antialias = true,
shadow = false
})
surface.CreateFont("BF_Menu_Tab_Inactive", {
font = FONT_FAMILY,
extended = true,
size = 20,
weight = 500,
antialias = true,
shadow = false
})
-- ---------------------------------------------------------------------------------
-- ANULACIÓN DEL MENÚ DE HELIX
-- ---------------------------------------------------------------------------------
-- Esta es la función clave. Cuando un jugador pulsa F1, Helix llama a 'ix.menu.Toggle()'.
-- Al redefinir esta función, tomamos el control total sobre lo que sucede.
function ix.menu.Toggle()
-- Si el panel del menú ya es válido (es decir, ya está abierto), lo eliminamos para cerrarlo.
if (IsValid(vguiBattlefrontMenu)) then
vguiBattlefrontMenu:Remove()
return
end
-- Creamos el panel principal ('DFrame') que servirá de contenedor para todo el menú.
vguiBattlefrontMenu = vgui.Create("DFrame")
vguiBattlefrontMenu:SetSize(ScrW(), ScrH()) -- Ocupa toda la pantalla.
vguiBattlefrontMenu:SetPos(0, 0)
vguiBattlefrontMenu:SetTitle("")
vguiBattlefrontMenu:ShowCloseButton(false) -- Ocultamos la 'X' de cierre por defecto.
vguiBattlefrontMenu:MakePopup() -- Hace que el panel se muestre por encima de todo y capture el input.
vguiBattlefrontMenu:SetDraggable(false) -- Evita que se pueda arrastrar.
-- La función 'Paint' se ejecuta cada frame y es donde dibujamos el aspecto del panel.
vguiBattlefrontMenu.Paint = function(self, width, height)
-- 1. DIBUJAR EL FONDO
-- Asegúrate de que esta ruta apunte a la imagen de fondo de tu addon.
-- Ejemplo: "materials/tu_addon/fondos/menu.png"
surface.SetDrawColor(255, 255, 255, 255)
surface.SetMaterial(Material("materials/custom_backgrounds/swrp_bg.png")) -- <<< ¡¡¡CAMBIA ESTA RUTA!!!
surface.DrawTexturedRect(0, 0, width, height)
-- 2. DIBUJAR LA BARRA DE NAVEGACIÓN SUPERIOR
-- Un degradado sutil para la barra superior.
draw.SimpleRectGradientVertical(0, 0, width, 62, COLOR_BACKGROUND, Color(0, 0, 0, 150))
-- La línea azul que subraya la barra de navegación.
surface.SetDrawColor(COLOR_BLUE_HIGHLIGHT)
surface.DrawRect(0, 60, width, 2)
end
-- Este panel contendrá el contenido de la pestaña activa (inventario, personaje, etc.).
local contentPanel = vgui.Create("DPanel", vguiBattlefrontMenu)
contentPanel:Dock(FILL)
contentPanel:DockMargin(0, 62, 0, 0) -- Lo posicionamos justo debajo de la barra de navegación.
contentPanel.Paint = function(self, width, height)
-- Hacemos su fondo completamente transparente para que se vea la imagen principal.
return true
end
-- Almacenaremos las pestañas y su contenido en esta tabla.
local TABS = {}
local activeTabPanel -- Variable para saber qué panel de contenido está visible.
-- Función para cambiar de pestaña.
local function SwitchTab(tabID, panelToShow)
-- Ocultamos el panel de la pestaña que estuviera activa.
if (IsValid(activeTabPanel)) then
activeTabPanel:SetVisible(false)
end
-- Mostramos el nuevo panel de contenido y lo guardamos como el activo.
panelToShow:SetVisible(true)
activeTabPanel = panelToShow
-- Actualizamos el estado visual de todos los botones de las pestañas.
for id, data in pairs(TABS) do
data.button:SetActivated(id == tabID)
end
end
-- Función auxiliar para crear una nueva pestaña de navegación.
local function CreateTab(id, name, creationFunction)
local button = vgui.Create("DButton", vguiBattlefrontMenu)
button:SetText("") -- El texto lo dibujamos nosotros en Paint para un mayor control.
button:SetSize(140, 60) -- Ancho ajustado para que quepan todas las pestañas.
button.tabName = name
button.isActivated = false -- Variable para saber si la pestaña está activa.
function button:SetActivated(isNowActive)
self.isActivated = isNowActive
end
-- Redibujamos el botón para darle el estilo de Battlefront.
button.Paint = function(self, width, height)
local color
local font
if (self.isActivated) then
color = COLOR_BLUE_HIGHLIGHT
font = "BF_Menu_Tab_Active"
elseif (self:IsHovered()) then
color = COLOR_WHITE_TEXT
font = "BF_Menu_Tab_Active"
else
color = COLOR_GREY_TEXT
font = "BF_Menu_Tab_Inactive"
end
-- Dibuja el texto de la pestaña.
draw.SimpleText(self.tabName, font, width * 0.5, height * 0.5 - 2, color, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
-- Si la pestaña está activada, dibuja la línea azul debajo.
if (self.isActivated) then
surface.SetDrawColor(COLOR_BLUE_HIGHLIGHT)
surface.DrawRect(width * 0.1, height - 5, width * 0.8, 3)
end
end
-- Creamos el panel de contenido para esta pestaña usando la función que nos pasaron.
-- ¡Esta es la parte donde reutilizamos los paneles de Helix!
local panel = creationFunction(contentPanel)
panel:SetVisible(false)
panel:Dock(FILL)
TABS[id] = { button = button, panel = panel }
-- Cuando se hace clic en el botón, llamamos a la función para cambiar de pestaña.
button.DoClick = function()
SwitchTab(id, panel)
surface.PlaySound("garrysmod/ui_click.wav")
end
return button
end
-- Definimos las pestañas que queremos en nuestro menú.
-- 'id' es un identificador único.
-- 'name' es el texto que se mostrará.
-- 'func' es la función que crea el panel de Helix correspondiente.
-- ACTUALIZADO: Añadidas las pestañas 'Clases' y 'Negocios' para una integración completa.
local tabsData = {
{ id = "character", name = "PERSONAJE", func = function(parent) return vgui.Create("ix.derma.Character", parent) end },
{ id = "inventory", name = "INVENTARIO", func = function(parent) return vgui.Create("ix.derma.Inventory", parent) end },
{ id = "classes", name = "CLASES", func = function(parent) return vgui.Create("ix.derma.Classes", parent) end },
{ id = "business", name = "NEGOCIOS", func = function(parent) return vgui.Create("ix.derma.Business", parent) end },
{ id = "scoreboard", name = "JUGADORES", func = function(parent) return vgui.Create("ix.derma.Scoreboard", parent) end },
{ id = "settings", name = "CONFIGURACIÓN", func = function(parent) return vgui.Create("ix.derma.Settings", parent) end },
{ id = "help", name = "AYUDA", func = function(parent) return vgui.Create("ix.derma.Help", parent) end }
}
-- Creamos y posicionamos los botones de las pestañas en la barra superior.
local xOffset = 20
for _, data in ipairs(tabsData) do
local tabButton = CreateTab(data.id, data.name, data.func)
tabButton:SetPos(xOffset, 0)
xOffset = xOffset + tabButton:GetWide()
end
-- Botón para cerrar el menú en la esquina superior derecha.
local closeButton = vgui.Create("DButton", vguiBattlefrontMenu)
closeButton:SetText("CERRAR")
closeButton:SetFont("BF_Menu_Tab_Active")
closeButton:SetSize(120, 60)
closeButton:SetPos(vguiBattlefrontMenu:GetWide() - closeButton:GetWide() - 20, 0)
closeButton:SetTextColor(COLOR_GREY_TEXT)
closeButton.Paint = function(self, w, h)
-- No dibujamos fondo, solo cambiamos el color del texto al pasar el ratón.
if (self:IsHovered()) then
self:SetTextColor(COLOR_WHITE_TEXT)
else
self:SetTextColor(COLOR_GREY_TEXT)
end
end
closeButton.DoClick = function()
vguiBattlefrontMenu:Remove()
surface.PlaySound("garrysmod/ui_close.wav")
end
-- Activamos la primera pestaña ("Personaje") por defecto al abrir el menú.
-- Usamos un 'timer.Simple' de 0 segundos para asegurarnos de que todos los
-- paneles se han creado antes de intentar cambiar a uno.
timer.Simple(0, function()
if (TABS["character"] and IsValid(TABS["character"].panel)) then
SwitchTab("character", TABS["character"].panel)
end
end)
end
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment