Plantilla gratuita · archivos fuente incluidos
Script gratis de reglas para tu servidor FiveM
Ofrece a los jugadores un comando /rules que abre las reglas de tu servidor en un pequeño panel NUI. Descarga la plantilla existente de RPScripts, edita las reglas y pruébala en tu servidor.
- 7 archivos fuente
- Sin dependencias de framework ni base de datos
Esta descarga no requiere cuenta, pago ni créditos de IA.
Qué hace el script
El comando /rules abre un panel con reglas editables. Los jugadores lo cierran con Escape o con el botón «Close». El código del cliente libera el foco de la NUI al cerrar el panel y al detener el recurso.
Esta pequeña plantilla solo muestra las reglas. No registra su aceptación, no las hace cumplir, no gestiona permisos ni sustituye las herramientas de moderación.

Instálalo en un servidor de pruebas
- Extrae el ZIP en resources/[local]/ para que el manifiesto quede en resources/[local]/rules_board/fxmanifest.lua. Evita anidar otra carpeta rules_board dentro de ella.
- Edita Config.Rules en config.lua y los textos del panel en locales/en.lua. Si otro recurso ya utiliza /rules, cambia Config.Command antes de iniciar este.
- Añade la línea de abajo a server.cfg y reinicia tu servidor de pruebas. Mantén el nombre rules_board en la carpeta del recurso para que coincida con el comando.
ensure rules_board - Conéctate con FiveM y ejecuta /rules. Revisa cada regla, cierra el panel con el botón, vuelve a abrirlo y ciérralo con Escape. Comprueba que recuperas el movimiento y el control del ratón y busca errores en las consolas F8 y del servidor. Prueba también a detener y reiniciar el recurso.
Personalízalo
Config.Command- El nombre del comando sin la barra. El valor predeterminado es rules.
Config.Rules- La lista de textos de las reglas que se muestran en el panel. Sustituye las tres reglas de ejemplo por las tuyas.
Config.Layout.panel- Punto de anclaje del panel y desplazamientos x/y en porcentaje. De forma predeterminada, se sitúa arriba a la derecha.
Config.Theme.name- Elige blue, red, green, orange o purple, o indica un color CSS.
locales/en.lua- El título del panel, el texto del botón «Close» y la indicación de la tecla Escape. Tradúcelos para tus jugadores.
Revisa el código fuente antes de instalar
Estos son exactamente los siete archivos del ZIP. El código Lua, HTML, CSS y JavaScript se puede leer y editar. Abrir un archivo aquí no lo ejecuta.
config.lua
Config = {}
Config.Command = 'rules'
-- Exactly three rules shown in the panel
Config.Rules = {
'Respect all players and staff. No harassment or hate speech.',
'No random killing (RDM) or vehicle deathmatching (VDM).',
'No cheating, exploiting bugs or using unfair advantages.'
}
Config.Layout = { panel = { anchor = 'top-right', x = 2.0, y = 3.0 } }
Config.Theme = { name = 'blue' }
Config.SpeedUnit = 'kmh'
fxmanifest.lua
fx_version 'cerulean'
game 'gta5'
lua54 'yes'
name 'rules_board'
description 'Standalone /rules command with NUI panel'
version '1.0.0'
shared_scripts {
'config.lua',
'locales/en.lua'
}
client_script 'client/main.lua'
ui_page 'html/index.html'
files {
'html/index.html',
'html/style.css',
'html/script.js'
}
html/script.js
const panel = document.getElementById('panel');
const colors = { blue: '#3b82f6', red: '#ef4444', green: '#22c55e', orange: '#f97316', purple: '#a855f7' };
function post(name, data) {
return fetch(`https://${GetParentResourceName()}/${name}`, {
method: 'POST',
body: JSON.stringify(data || {})
}).catch(() => {});
}
function place(layout) {
panel.style.top = panel.style.bottom = panel.style.left = panel.style.right = 'auto';
panel.style.transform = '';
const a = (layout && layout.anchor) || 'top-right';
const x = ((layout && layout.x) || 0) + '%';
const y = ((layout && layout.y) || 0) + '%';
let tx = '', ty = '';
if (a.includes('top')) panel.style.top = y;
else if (a.includes('bottom')) panel.style.bottom = y;
else { panel.style.top = '50%'; ty = 'translateY(-50%)'; }
if (a.includes('left')) panel.style.left = x;
else if (a.includes('right')) panel.style.right = x;
else { panel.style.left = '50%'; tx = 'translateX(-50%)'; }
panel.style.transform = (tx + ' ' + ty).trim();
}
window.addEventListener('message', (e) => {
const d = e.data;
if (d.action === 'open') {
document.getElementById('title').textContent = d.title;
document.getElementById('hint').textContent = d.hint;
document.getElementById('closeBtn').textContent = d.close;
const list = document.getElementById('rules');
list.innerHTML = '';
(d.rules || []).forEach((r) => {
const li = document.createElement('li');
li.textContent = r;
list.appendChild(li);
});
const c = colors[d.theme] || d.theme || colors.blue;
panel.style.borderTopColor = c;
document.getElementById('closeBtn').style.background = c;
place(d.layout);
panel.classList.remove('hidden');
} else if (d.action === 'close') {
panel.classList.add('hidden');
}
});
document.getElementById('closeBtn').addEventListener('click', () => post('close'));
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && !panel.classList.contains('hidden')) post('close');
});
html/style.css
html, body { margin: 0; height: 100%; overflow: hidden; background: transparent; font-family: Arial, sans-serif; }
#panel {
position: absolute;
width: 320px;
padding: 18px 20px;
border-radius: 10px;
background: rgba(20, 24, 33, 0.92);
color: #fff;
border-top: 4px solid #3b82f6;
box-shadow: 0 6px 24px rgba(0, 0, 0, 0.5);
}
#panel.hidden { display: none; }
h1 { margin: 0 0 12px; font-size: 20px; }
ol { margin: 0 0 12px; padding-left: 20px; font-size: 14px; line-height: 1.45; }
li { margin-bottom: 8px; }
#hint { margin: 0 0 12px; font-size: 11px; opacity: 0.6; }
button {
width: 100%;
padding: 8px;
border: 0;
border-radius: 6px;
background: #3b82f6;
color: #fff;
font-size: 14px;
cursor: pointer;
}
button:hover { filter: brightness(1.15); }
locales/en.lua
Locale = {
title = 'Server Rules',
close = 'Close',
hint = 'Press ESC to close'
}
client/main.lua
local isOpen = false
local function openRules()
if isOpen then return end
isOpen = true
SetNuiFocus(true, true)
SendNUIMessage({
action = 'open',
title = Locale.title,
close = Locale.close,
hint = Locale.hint,
rules = Config.Rules,
layout = Config.Layout.panel,
theme = Config.Theme.name
})
end
local function closeRules()
isOpen = false
SetNuiFocus(false, false)
SendNUIMessage({ action = 'close' })
end
RegisterCommand(Config.Command, function()
openRules()
end, false)
RegisterNUICallback('close', function(_, cb)
closeRules()
cb('ok')
end)
AddEventHandler('onResourceStop', function(resource)
if resource ~= GetCurrentResourceName() then return end
SetNuiFocus(false, false)
end)
html/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="panel" class="hidden">
<h1 id="title"></h1>
<ol id="rules"></ol>
<p id="hint"></p>
<button id="closeBtn"></button>
</div>
<script src="script.js"></script>
</body>
</html>
Qué se ha comprobado
Este es un resultado de RPScripts AI registrado el 2026-10-13. El registro de validación guardado no contiene problemas señalados por las comprobaciones estáticas e incluye una comprobación con LuaLS. La vista previa muestra la NUI en un navegador. Estas comprobaciones no demuestran su comportamiento dentro del juego ni en multijugador; pruébalo en tu propia configuración antes de usarlo en un servidor público.
SHA-256 del mapa registrado de archivos fuente
62219c0eb6cef9f6ce6fb2b88c8c7fbfe1c7c6f526230266b8e575306ded40c3Si el panel no se abre o no se cierra
Comprueba primero la estructura de carpetas y el nombre del recurso en server.cfg. Confirma que el recurso se ha iniciado, revisa Config.Command por si hay un conflicto y busca errores de Lua o NUI en F8. Si el panel sigue capturando la entrada, detén el recurso de prueba y revisa client/main.lua antes de continuar.
¿Quieres cambiar el comportamiento?
Abre esta misma plantilla en RPScripts AI para trabajar sobre una copia. Abrir el ejemplo es gratis y requiere una cuenta; los cambios realizados por la IA se rigen por tu plan actual y tus límites de créditos.
Sigue construyendo tu servidor
Usa el probador de scripts para una revisión estática de tus cambios o explora recursos listos para usar para los demás sistemas que necesita tu servidor.