Aller au contenu

10 % de remise, appliquée au paiement

RPScriptsRPScripts
Outils FiveM gratuits

Modèle gratuit · fichiers source inclus

Script gratuit de règles de serveur FiveM

Proposez aux joueurs une commande /rules qui affiche les règles de votre serveur dans un petit panneau NUI. Téléchargez le modèle existant de RPScripts, modifiez les règles et testez-le sur votre serveur.

  • 7 fichiers source
  • Aucune dépendance à un framework ou à une base de données
Télécharger le ZIP gratuit

Aucun compte, paiement ou crédit IA n’est nécessaire pour ce téléchargement.

Ce que fait le script

La commande /rules ouvre un panneau contenant des règles modifiables. Les joueurs le ferment avec Échap ou le bouton « Close ». Le code client libère le focus NUI à la fermeture du panneau et à l’arrêt de la ressource.

Ce petit modèle sert uniquement à afficher les règles. Il n’enregistre pas leur acceptation, ne les fait pas respecter, ne gère pas les permissions et ne remplace pas les outils de modération.

Interface NUI du panneau de règles affichée dans un navigateur avec des messages de jeu simulés
Aperçu enregistré dans un navigateur avec des messages de jeu simulés. Il ne s’agit pas d’une capture d’écran en jeu.

Installer sur un serveur de test

  1. Décompressez le ZIP dans resources/[local]/ pour que le manifeste se trouve à l’emplacement resources/[local]/rules_board/fxmanifest.lua. Évitez d’y imbriquer un deuxième dossier rules_board.
  2. Modifiez Config.Rules dans config.lua et les libellés du panneau dans locales/en.lua. Si une autre ressource utilise déjà /rules, modifiez Config.Command avant de démarrer celle-ci.
  3. Ajoutez la ligne ci-dessous à server.cfg, puis redémarrez votre serveur de test. Conservez le nom rules_board pour le dossier de la ressource afin qu’il corresponde à la commande.
    ensure rules_board
  4. Connectez-vous avec FiveM et exécutez /rules. Vérifiez chaque règle, fermez le panneau avec le bouton, rouvrez-le et fermez-le avec Échap. Confirmez que les déplacements et le contrôle de la souris fonctionnent à nouveau, puis recherchez les erreurs dans les consoles F8 et serveur. Testez également l’arrêt et le redémarrage de la ressource.
Lire la référence des manifestes de ressources FiveM

Personnalisez le script

Config.Command
Le nom de la commande sans la barre oblique. La valeur par défaut est rules.
Config.Rules
La liste des textes de règles affichés dans le panneau. Remplacez les trois règles d’exemple par les vôtres.
Config.Layout.panel
Le point d’ancrage du panneau et les décalages x/y en pourcentage. Par défaut, le panneau se place en haut à droite.
Config.Theme.name
Choisissez blue, red, green, orange ou purple, ou indiquez une couleur CSS.
locales/en.lua
Le titre du panneau, le libellé du bouton « Close » et l’indication de la touche Échap. Traduisez ces textes pour vos joueurs.

Consultez le code source avant l’installation

Voici les sept fichiers exacts du ZIP. Le code Lua, HTML, CSS et JavaScript est lisible et modifiable. Ouvrir un fichier ici ne l’exécute pas.

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>

Ce qui a été vérifié

Ce résultat de RPScripts AI a été enregistré le 2026-10-13. Le compte rendu de validation sauvegardé ne signale aucun problème lors des vérifications statiques et mentionne une vérification LuaLS. L’aperçu montre l’interface NUI dans un navigateur. Ces vérifications ne permettent pas d’établir son comportement en jeu ou en multijoueur ; testez la ressource dans votre propre environnement avant de l’utiliser sur un serveur public.

SHA-256 de la table des fichiers source enregistrée

62219c0eb6cef9f6ce6fb2b88c8c7fbfe1c7c6f526230266b8e575306ded40c3

Si le panneau ne s’ouvre ou ne se ferme pas

Vérifiez d’abord l’imbrication des dossiers et le nom de la ressource dans server.cfg. Confirmez que la ressource a démarré, vérifiez qu’il n’y a pas de conflit avec Config.Command et recherchez les erreurs Lua ou NUI dans F8. Si les commandes restent capturées par le panneau, arrêtez la ressource de test et examinez client/main.lua avant de continuer.

Vous souhaitez modifier le comportement ?

Ouvrez ce même modèle dans RPScripts AI pour travailler sur une copie. L’ouverture de l’exemple est gratuite et nécessite un compte ; les modifications par l’IA sont soumises à votre forfait actuel et à vos limites de crédits.

Voir les autres exemples de modèles IA

Continuez à construire votre serveur

Utilisez le testeur de scripts pour une vérification statique de vos modifications, ou parcourez les ressources prêtes à l’emploi pour les autres systèmes dont votre serveur a besoin.