Zum Inhalt springen

10 % Shop-Rabatt, automatisch im Checkout

RPScriptsRPScripts
Kostenlose FiveM-Tools

Kostenlose Vorlage · Quelldateien enthalten

Kostenloses Script für deine FiveM-Serverregeln

Mit dem Befehl /rules können Spieler deine Serverregeln in einem kleinen NUI-Panel öffnen. Lade die vorhandene RPScripts-Vorlage herunter, passe die Regeln an und teste sie auf deinem Server.

  • 7 Quelldateien
  • Kein Framework und keine Datenbank erforderlich
ZIP kostenlos herunterladen

Für diesen Download brauchst du kein Konto, musst nichts bezahlen und verbrauchst keine AI-Credits.

Was das Script macht

Der Befehl /rules öffnet ein Panel mit anpassbaren Regeln. Spieler schließen es mit Escape oder dem Button „Close“. Der Client-Code gibt den NUI-Fokus frei, wenn das Panel geschlossen oder die Ressource gestoppt wird.

Dies ist eine kleine Vorlage, die Regeln nur anzeigt. Sie speichert keine Zustimmung zu den Regeln, setzt keine Regeln durch, verwaltet keine Berechtigungen und ersetzt keine Moderationstools.

Die NUI des Regel-Panels, im Browser mit simulierten Spielnachrichten dargestellt
Aufgezeichnete Browser-Vorschau mit simulierten Spielnachrichten. Dies ist kein Screenshot aus dem Spiel.

Auf einem Testserver installieren

  1. Entpacke die ZIP-Datei nach resources/[local]/, sodass das Manifest unter resources/[local]/rules_board/fxmanifest.lua liegt. Achte darauf, darin keinen weiteren Ordner namens rules_board zu verschachteln.
  2. Bearbeite Config.Rules in config.lua und die Beschriftungen des Panels in locales/en.lua. Falls eine andere Ressource bereits /rules verwendet, ändere Config.Command, bevor du diese Ressource startest.
  3. Füge die folgende Zeile in server.cfg ein und starte deinen Testserver neu. Der Ressourcenordner muss rules_board heißen, damit der Befehl dazu passt.
    ensure rules_board
  4. Verbinde dich mit FiveM und führe /rules aus. Prüfe jede Regel, schließe das Panel mit dem Button, öffne es erneut und schließe es mit Escape. Prüfe, ob Bewegung und Maussteuerung wieder funktionieren, und suche in der F8-Konsole und der Serverkonsole nach Fehlern. Teste auch das Stoppen und Neustarten der Ressource.
FiveM-Referenz zum Ressourcenmanifest lesen

Passe es an deinen Server an

Config.Command
Der Befehlsname ohne Schrägstrich. Der Standardwert ist rules.
Config.Rules
Die Liste der Regeltexte, die im Panel angezeigt werden. Ersetze die drei Beispielregeln durch deine eigenen.
Config.Layout.panel
Ankerpunkt des Panels und x/y-Versatz in Prozent. Standardmäßig erscheint es oben rechts.
Config.Theme.name
Wähle blue, red, green, orange oder purple oder gib einen CSS-Farbwert an.
locales/en.lua
Der Titel des Panels, die Beschriftung des Buttons „Close“ und der Hinweis auf Escape. Übersetze diese Texte für deine Spieler.

Prüfe den Quelltext vor der Installation

Dies sind genau die sieben Dateien aus der ZIP-Datei. Lua, HTML, CSS und JavaScript sind lesbar und bearbeitbar. Wenn du hier eine Datei öffnest, wird sie nicht ausgeführt.

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>

Was geprüft wurde

Dies ist eine aufgezeichnete Ausgabe von RPScripts AI vom 2026-10-13. Die gespeicherte Validierungsaufzeichnung enthält keine gemeldeten Probleme aus statischen Prüfungen und dokumentiert eine LuaLS-Prüfung. Die Vorschau zeigt die NUI im Browser. Diese Prüfungen belegen nicht das Verhalten im Spiel oder im Mehrspielermodus. Teste die Ressource in deiner eigenen Umgebung, bevor du sie öffentlich einsetzt.

SHA-256 der aufgezeichneten Quelldatei-Zuordnung

62219c0eb6cef9f6ce6fb2b88c8c7fbfe1c7c6f526230266b8e575306ded40c3

Wenn sich das Panel nicht öffnen oder schließen lässt

Prüfe zuerst die Ordnerstruktur und den Ressourcennamen in server.cfg. Vergewissere dich, dass die Ressource gestartet ist, prüfe Config.Command auf einen Konflikt und suche in F8 nach Lua- oder NUI-Fehlern. Wenn die Eingabe weiterhin vom Panel abgefangen wird, stoppe die Testressource und prüfe client/main.lua, bevor du fortfährst.

Möchtest du das Verhalten ändern?

Öffne diese Vorlage in RPScripts AI, um an einer Kopie zu arbeiten. Das Öffnen des Beispiels ist kostenlos und erfordert ein Konto. Für Änderungen durch die AI gelten dein aktueller Tarif und deine Credit-Limits.

Weitere AI-Vorlagen ansehen

Baue deinen Server weiter aus

Nutze den Script-Tester für eine statische Prüfung deiner Änderungen oder entdecke fertige Ressourcen für die anderen Systeme, die dein Server braucht.