> For the complete documentation index, see [llms.txt](https://pepper-scripts.gitbook.io/pepper-scripts-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://pepper-scripts.gitbook.io/pepper-scripts-docs/docs/de/tools-ui/pepper-rp-commands.md).

# Pepper RP-Commands

Kostenlose Roleplay-Befehle mit modernen Sprechblasen – /me, /do, /try, /status, /whisper, /shout und mehr. Standalone.

{% hint style="success" %}
✅ **Pepper RP-Commands holen:** <https://shop.pepperscripts.de/package/7729481>
{% endhint %}

{% hint style="info" %}
🧪 **Getestet auf unserem Dev-Server:** Wir testen alle Skripte selbstverständlich permanent auf unserem eigenen Dev-Server „Pepper Scripts“.
{% endhint %}

Kostenlos und Open Source: <https://github.com/PepperScripts/pepper\\_rpcommands>

## Überblick

Pepper RP-Commands bringt zehn Roleplay-Befehle wie `/me`, `/do`, `/try` und `/status` auf deinen Server. Der Text erscheint als Sprechblase über dem Kopf und auf Wunsch als Zeile im Chat – aber nur bei Spielern in Reichweite und, wenn du willst, nur bei Sichtkontakt. Würfel, Münze und `/try` entscheidet der Server, damit niemand ein Ergebnis fälschen kann. Läuft Standalone und holt sich den Charakternamen aus ESX, QBCore oder Qbox, wenn vorhanden.

### Features

* 10 Befehle: `/me`, `/do`, `/try`, `/roll`, `/dice`, `/coin`, `/status`, `/looc`, `/whisper`, `/shout`
* Moderne Sprechblasen über dem Kopf mit Symbol je Befehl – oder `minimal` (Text mit Schatten) bzw. `classic` (GTA-Schrift)
* `/status` hält einen Text über dem Kopf (z. B. „verletzt“), bis du ihn entfernst oder die Zeit abläuft
* Mehrere Texte stapeln sich über einem Spieler, lange Texte werden umgebrochen
* Charaktername aus ESX, QBCore oder Qbox in der Chat-Zeile – wird automatisch erkannt
* `/try`, `/roll`, `/dice` und `/coin` entscheidet der Server – niemand kann ein Ergebnis fälschen
* Nur Spieler in Reichweite bekommen den Text (gleiche Dimension); auf Wunsch nur bei Sichtkontakt, also nicht durch Wände
* Discord-Webhook-Protokoll, Wortfilter, Admin-Befehle zum Entfernen von Texten und Sperren von Spielern
* Exports für andere Ressourcen
* Englisch, Deutsch, Französisch, Spanisch und Niederländisch
* Keine Abhängigkeiten; die Zeichenschleife läuft nur, solange ein Text oder Status aktiv ist

## Voraussetzungen

| Abhängigkeit                                          | Pflicht/optional | Wofür                                                                                                                   | Link                                                             |
| ----------------------------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
| FiveM-Server (`fx_version 'cerulean'`, Lua 5.4)       | Pflicht          | Läuft die Ressource                                                                                                     | <https://docs.fivem.net/docs/server-manual/setting-up-a-server/> |
| ESX Legacy, QBCore oder Qbox                          | optional         | Charaktername in der Chat-Zeile und Admin-Gruppen; ohne Framework FiveM-Name + ACE                                      | –                                                                |
| Chat-Ressource (Standard-Chat oder z. B. Pepper Chat) | optional         | Chat-Zeile, Hinweise und Befehlsvorschläge (`chat:addMessage`, `chat:addSuggestion`)                                    | **Pepper Chat**                                                  |
| OneSync                                               | optional         | Mit OneSync schickt der Server Texte nur an Spieler in Reichweite; ohne an alle, der Client prüft die Entfernung selbst | –                                                                |
| Datenbank                                             | nicht nötig      | Keine Datenbank, kein oxmysql – Status und Sperren liegen im Speicher des Servers                                       | –                                                                |

## Installation

1. Ordner `pepper_rpcommands` in deinen `resources`-Ordner legen. **Den Ordnernamen nicht umbenennen** – die Exports heißen `exports.pepper_rpcommands:…`.
2. In der `server.cfg` eintragen, nach deinem Framework und deinem Chat:

   ```
   ensure es_extended      # oder qb-core / qbx_core – optional
   ensure chat             # oder pepper_chat
   ensure pepper_rpcommands
   ```
3. Andere Ressourcen entfernen, die `/me` oder `/do` anlegen – sonst antworten beide.
4. `Config.Locale` in der `config.lua` setzen und den Server neu starten.
5. Optional – Admin-Rechte per ACE:

   ```
   add_ace group.admin pepperrp.admin allow
   ```

**Update von 1.x:** den ganzen Ordner ersetzen. Hast du die `config.lua` geändert, übertrage deine Werte in die neue Datei – die neuen Befehle erscheinen nur mit der neuen Config. `config_server.lua` ist neu und gehört dazu.

### Erster Test

1. Im Spiel `/me öffnet den Kofferraum` eingeben – über deinem Kopf erscheint eine Sprechblase, im Chat eine Zeile.
2. `/try das Schloss knacken` – der Server entscheidet „gelingt“ oder „misslingt“.
3. `/dice 2d6` – zwei Würfel mit Einzelergebnissen und Summe.
4. `/status verletzt` setzt einen Dauertext, `/status` ohne Text entfernt ihn.
5. Mit einem zweiten Spieler: `/whisper hier drüben` ist nur innerhalb von 3 m zu sehen.

## Konfiguration

| Datei               | Steuert                                                                                                                                   |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `config.lua`        | Sprache, Stil, Größe, Reichweite, Dauer, Stapel, Sichtprüfung, Länge, Wartezeit, Chat, Name, alle Befehle (wird an die Spieler geschickt) |
| `config_server.lua` | Webhook, Konsolenprotokoll, Wortfilter, Admin-Gruppen und -Befehle (nur auf dem Server)                                                   |
| `locales/*.json`    | Texte über dem Kopf, Chat-Zeilen und Hinweise je Sprache                                                                                  |
| `html/style.css`    | Aussehen der Sprechblasen (Stile `modern` und `minimal`)                                                                                  |

### Allgemein

| Option                      | Standard      | Beschreibung                                                                                                |
| --------------------------- | ------------- | ----------------------------------------------------------------------------------------------------------- |
| `Config.Locale`             | `'en'`        | `en`, `de`, `fr`, `es` oder `nl`                                                                            |
| `Config.Style`              | `'modern'`    | `modern` (Sprechblase mit Symbol), `minimal` (Text mit Schatten) oder `classic` (GTA-Schrift wie Version 1) |
| `Config.Scale`              | `1.0`         | Größe der Sprechblasen                                                                                      |
| `Config.Distance`           | `15.0`        | Standard-Reichweite in Metern                                                                               |
| `Config.Duration`           | `7000`        | So lange bleibt ein Text über dem Kopf (Millisekunden)                                                      |
| `Config.MaxStack`           | `3`           | Texte, die sich über einem Spieler stapeln; ältere verschwinden                                             |
| `Config.RequireLineOfSight` | `true`        | Text nur bei Sichtkontakt (nicht durch Wände)                                                               |
| `Config.MaxLength`          | `150`         | Höchstlänge einer Eingabe (bis 250)                                                                         |
| `Config.Cooldown`           | `1500`        | Wartezeit zwischen zwei Befehlen je Spieler (ms)                                                            |
| `Config.Chat`               | `true`        | Zusätzlich eine Chat-Zeile für alle in Reichweite                                                           |
| `Config.NameMode`           | `'character'` | `character` (Name aus ESX/QBCore/Qbox, sonst FiveM-Name) oder `fivem`                                       |
| `Config.GetName`            | `nil`         | Eigene Namensfunktion (läuft auf dem Server, ersetzt `NameMode`)                                            |

### Befehle

```lua
Config.Commands = {
    me      = { enabled = true, name = 'me',      color = { 255, 196, 107 }, icon = 'me' },
    try     = { enabled = true, name = 'try',     color = { 196, 160, 255 }, icon = 'try', chance = 50 },
    status  = { enabled = true, name = 'status',  color = { 200, 205, 215 }, icon = 'status', maxLength = 60, maxMinutes = 60 },
    whisper = { enabled = true, name = 'whisper', color = { 190, 215, 230 }, icon = 'whisper', distance = 3.0 },
    -- …
}
```

| Feld                                  | Beschreibung                                                                      |
| ------------------------------------- | --------------------------------------------------------------------------------- |
| `enabled`                             | `false` schaltet den Befehl ab                                                    |
| `name`                                | Befehlsname ohne `/`                                                              |
| `color`                               | Farbe als `{ Rot, Grün, Blau }` (0–255)                                           |
| `icon`                                | `me`, `do`, `try`, `dice`, `coin`, `status`, `ooc`, `whisper`, `shout`            |
| `distance`                            | Eigene Reichweite (sonst `Config.Distance`); `whisper` 3 m, `shout` 35 m          |
| `overhead` / `chat`                   | `false` blendet Sprechblase bzw. Chat-Zeile für diesen Befehl aus                 |
| `chance` (`try`)                      | Erfolgschance in Prozent, Standard `50`                                           |
| `default` / `max` (`roll`)            | Seiten ohne Angabe `6`, höchstens `1000`                                          |
| `maxDice` / `maxSides` (`dice`)       | Höchstens `10` Würfel mit je `100` Seiten                                         |
| `maxLength` / `maxMinutes` (`status`) | Statustext bis `60` Zeichen, läuft nach `60` Minuten ab (`0` = bis zum Ausloggen) |

### Server-Einstellungen (`config_server.lua`)

| Option                                  | Standard                                  | Beschreibung                                                                             |
| --------------------------------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------- |
| `ServerConfig.Webhook`                  | `''`                                      | Discord-Webhook für das Protokoll aller RP-Befehle (Name, Server-ID, Lizenz), `''` = aus |
| `ServerConfig.ConsoleLog`               | `false`                                   | Jede Zeile zusätzlich in der Server-Konsole                                              |
| `ServerConfig.Filter.mode`              | `'censor'`                                | `censor` (Sternchen), `block` (Befehl verwerfen) oder `off`                              |
| `ServerConfig.Filter.words`             | leer                                      | Gefilterte Wörter (Groß-/Kleinschreibung egal)                                           |
| `ServerConfig.Admin.groups`             | `{ 'god', 'superadmin', 'admin', 'mod' }` | Framework-Gruppen mit Admin-Befehlen                                                     |
| `ServerConfig.Admin.commands`           | `rpclear`, `rpmute`, `rpunmute`           | Namen der Admin-Befehle                                                                  |
| `ServerConfig.Admin.defaultMuteMinutes` | `30`                                      | Sperrdauer ohne Angabe (1 bis 10080 Minuten)                                             |

## Befehle und Rechte

| Befehl                 | Wer   | Beispiel → über dem Kopf                                                         |
| ---------------------- | ----- | -------------------------------------------------------------------------------- |
| `/me [Text]`           | alle  | `/me öffnet den Kofferraum` → öffnet den Kofferraum                              |
| `/do [Text]`           | alle  | `/do Die Tür ist abgeschlossen.`                                                 |
| `/try [Text]`          | alle  | `/try das Schloss knacken` → versucht: das Schloss knacken – gelingt / misslingt |
| `/roll [Seiten]`       | alle  | `/roll 20` → würfelt 14 (1–20)                                                   |
| `/dice [Würfel]`       | alle  | `/dice 2d6` → 3 + 5 = 8 (auch `d20` oder `3` = 3d6)                              |
| `/coin`                | alle  | wirft eine Münze: Kopf                                                           |
| `/status [Text]`       | alle  | Dauertext; `/status` allein entfernt ihn                                         |
| `/looc [Text]`         | alle  | (( brb )) – lokaler OOC-Chat                                                     |
| `/whisper [Text]`      | alle  | nur innerhalb von 3 m sichtbar                                                   |
| `/shout [Text]`        | alle  | sichtbar innerhalb von 35 m                                                      |
| `/rpclear [ID]`        | Admin | Texte und Status eines Spielers entfernen – ohne ID von allen                    |
| `/rpmute ID [Minuten]` | Admin | RP-Befehle für einen Spieler sperren (bleibt nach Reconnect)                     |
| `/rpunmute ID`         | Admin | Sperre aufheben                                                                  |

**Admin** ist, wer das ACE-Recht `pepperrp.admin` hat, eine Gruppe aus `ServerConfig.Admin.groups` (ESX-Gruppe, QBCore-Recht oder ACE-Gruppe bei Qbox) oder die Server-Konsole. RP-Befehle selbst gehen nicht von der Konsole. Tasten gibt es keine.

## Exports und Events

```lua
-- Server
exports.pepper_rpcommands:ShowText(source, 'öffnet den Tresor', { color = { 255, 196, 107 }, icon = 'me', duration = 5000, distance = 10.0 })
exports.pepper_rpcommands:SetStatus(source, 'gefesselt', 10) -- Minuten optional
exports.pepper_rpcommands:ClearStatus(source)
exports.pepper_rpcommands:GetStatus(source)  -- Text oder nil
exports.pepper_rpcommands:IsMuted(source)    -- true / false

-- Client
exports.pepper_rpcommands:ShowLocalText(serverId, 'nur du siehst das', { icon = 'do' })
exports.pepper_rpcommands:SetHidden(true) -- alles ausblenden, z. B. für einen Kinomodus
```

| Seite  | Export                                                                           | Wirkung                                                                                   |
| ------ | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| Server | `ShowText(source, text, options)`                                                | Sprechblase über einem Spieler für alle in Reichweite; `options.chat` = eigene Chat-Zeile |
| Server | `SetStatus(source, text, minutes)` / `ClearStatus(source)` / `GetStatus(source)` | Dauertext setzen, entfernen, abfragen                                                     |
| Server | `IsMuted(source)`                                                                | Ist der Spieler für RP-Befehle gesperrt?                                                  |
| Client | `ShowLocalText(serverId, text, options)`                                         | Sprechblase nur für diesen Spieler                                                        |
| Client | `SetHidden(bool)`                                                                | Alle Texte aus-/einblenden                                                                |

Symbole: `me`, `do`, `try`, `dice`, `coin`, `status`, `ooc`, `whisper`, `shout`, `chat`.

## FAQ

### `/me` antwortet doppelt – was tun?

Eine andere Ressource legt `/me` oder `/do` ebenfalls an (oft ein altes RP-Script oder ein Framework-Modul). Entferne sie oder benenne die Befehle hier über `name` in `Config.Commands` um.

### Ich sehe die Sprechblase, aber keine Chat-Zeile?

Die Chat-Zeile kommt über `chat:addMessage` – es muss eine Chat-Ressource laufen (Standard-Chat oder Pepper Chat). Außerdem prüfen: `Config.Chat = true` und beim Befehl nicht `chat = false`.

### Warum sehe ich die Texte anderer Spieler nicht?

Du musst in Reichweite sein (Standard 15 m, `whisper` 3 m) und in derselben Dimension (Routing-Bucket). Bei `Config.RequireLineOfSight = true` verschwinden Texte hinter Wänden – zum Testen auf `false` stellen.

### Brauche ich eine Datenbank?

Nein. Status und Sperren liegen im Speicher des Servers. Eine Sperre gilt über die Lizenz auch nach einem Reconnect, endet aber mit einem Neustart der Ressource oder des Servers.

### Wie lange bleibt ein `/status`?

Bis der Spieler `/status` ohne Text eingibt, sich ausloggt oder `maxMinutes` abläuft – Standard 60 Minuten. Mit `maxMinutes = 0` bleibt er bis zum Ausloggen.

### Wie zeige ich den Charakternamen statt des FiveM-Namens?

`Config.NameMode = 'character'` (Standard) holt den Namen aus Qbox, QBCore oder ESX. Für andere Frameworks setzt du `Config.GetName = function(source) … end` – die Funktion läuft auf dem Server.

### Wie ändere ich Farben und Aussehen?

Die Farbe je Befehl steht in `Config.Commands` (`color`), den Stil wählst du mit `Config.Style`, die Größe mit `Config.Scale`. Feinheiten der Sprechblase änderst du in `html/style.css`.

### Wie ändere ich die Texte?

In `locales/<sprache>.json`, z. B. die Zeilen über dem Kopf (`overhead_…`) und im Chat (`chat_…`).

### Kann ein Spieler das Ergebnis von `/try` oder `/dice` fälschen?

Nein. Die Zufallszahlen zieht der Server, der Client zeigt nur das Ergebnis an. Die Erfolgschance von `/try` stellst du mit `chance` ein.

### Wie benutze ich die Sprechblasen aus meinem eigenen Script?

Auf dem Server `exports.pepper_rpcommands:ShowText(source, 'Text', { icon = 'me' })`, für einen Dauertext `SetStatus(source, 'gefesselt', 10)`. Details unter „Exports und Events“.

### Werden Farbcodes oder HTML im Text angezeigt?

Nein. Der Server entfernt Steuerzeichen, GTA-Codes (`~r~`), Chat-Farbcodes (`^1`) und spitze Klammern, bevor der Text verteilt wird.

### Wie protokolliere ich alle RP-Befehle in Discord?

Webhook-URL in `config_server.lua` bei `ServerConfig.Webhook` eintragen. Die Datei bleibt auf dem Server.

### Wie update ich Pepper RP-Commands?

Ordner ersetzen, vorher `config.lua` und `config_server.lua` sichern und deine Werte in die neuen Dateien übertragen. Änderungen stehen in der `CHANGELOG.md` im Ressourcen-Ordner.

## Support

Ticket in unserem [Discord](https://discord.gg/6NaFJWKDYu) (Kategorie „Script Support“) öffnen und den Kauf vorher mit `/verify` verknüpfen.

## Changelog

Aktuelle Version **2.0.0**: Sprechblasen mit drei Stilen, `/status`, `/looc`, `/whisper`, `/shout`, `/coin`, `/dice`, Charaktername, Webhook, Admin-Befehle, Wortfilter, Exports und drei neue Sprachen. Alle Änderungen stehen in der `CHANGELOG.md` im Ressourcen-Ordner.
