> 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-notify.md).

# Pepper Notify

Kostenlose Benachrichtigungen in vier Typen mit Titel, Zeitbalken und Ton – Standalone für jeden Server.

{% hint style="success" %}
✅ **Pepper Notify holen:** <https://shop.pepperscripts.de/package/7729478>
{% 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\\_notify>

## Überblick

Mit Pepper Notify sehen alle Meldungen auf deinem Server gleich aus: Erfolg, Fehler, Info oder Warnung, mit optionalem Titel, Zeitbalken und Ton. Deine Scripts rufen den Export vom Client oder vom Server auf, die Meldung erscheint an einer von 8 Positionen, der Balken läuft ab und sie verschwindet. Kommt dieselbe `id` noch einmal, wird die Meldung ersetzt statt gestapelt.

### Features

* Vier Typen: `success`, `error`, `info`, `warning` – jeder mit eigener Farbe und eigenem Symbol
* Optionaler Titel, Zeitbalken und Ton (GTA-eigene Sounds, keine Audiodateien)
* Acht Positionen mit einstellbarem Abstand zum Rand (`Config.Offset`), Farben und Dauer in der `config.lua`
* Exports für Client und Server, dazu ein Client-Event
* Versteht die Feldnamen von ox\_lib (`description`, `type = 'inform'`) und QBCore (`text`, `length`, `'primary'`)
* Gleiche `id` ersetzt eine Meldung, statt sie zu stapeln
* Keine Abhängigkeiten, keine Schleife im Hintergrund

## 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/> |
| Framework (ESX Legacy, QBCore, Qbox)            | optional         | Nicht nötig – Standalone. Mit Framework kannst du dessen Meldungen umleiten (siehe „Für Entwickler“) | –                                                                |
| OneSync                                         | nicht nötig      | –                                                                                                    | –                                                                |
| Datenbank                                       | nicht nötig      | Pepper Notify speichert nichts – keine Datenbank, kein oxmysql                                       | –                                                                |

## Installation

1. Ordner `pepper_notify` in deinen `resources`-Ordner legen. **Den Ordnernamen nicht umbenennen** – die Exports heißen `exports.pepper_notify:…` und funktionieren nur mit genau diesem Namen.
2. In der `server.cfg` eintragen – **vor** den Scripts, die Meldungen schicken:

   ```
   ensure pepper_notify
   # danach deine anderen Scripts, z. B.
   ensure meine_garage
   ```
3. Server neu starten. Eine Datenbank oder Items gibt es nicht.

### Erster Test

1. Im Spiel **T** drücken und `/notifytest` eingeben (in der F8-Konsole ohne Schrägstrich: `notifytest`).
2. Rechts in der Mitte erscheinen vier Meldungen: grün „Saved successfully.“, rot „Something went wrong.“, blau ohne Titel und orange „Your vehicle is low on fuel.“ (die Testtexte sind fest auf Englisch).
3. Achte auf den Zeitbalken: Nach etwa 5 Sekunden verschwinden drei Meldungen, die orange bleibt etwa 8 Sekunden.
4. Wenn alles passt, `Config.TestCommand = false` setzen.

## Konfiguration

| Datei            | Steuert                                                                         |
| ---------------- | ------------------------------------------------------------------------------- |
| `config.lua`     | Position, Abstand zum Rand, Dauer, Anzahl, Zeitbalken, Ton, Farben, Testbefehl  |
| `html/style.css` | Aussehen der Meldungen (Schrift, Rundung, Hintergrund) – für eigene Anpassungen |

Nach einer Änderung reicht `restart pepper_notify` in der Server-Konsole (oder ein Server-Neustart).

### Position und Abstand

```lua
Config.Position = 'center-right'
Config.Offset = { x = 1.5, y = 2.0 }
```

| Option            | Standard               | Beschreibung                                                                                                         |
| ----------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `Config.Position` | `'center-right'`       | `top-right`, `top-left`, `top-center`, `center-right`, `center-left`, `bottom-right`, `bottom-left`, `bottom-center` |
| `Config.Offset`   | `{ x = 1.5, y = 2.0 }` | Abstand zum Bildschirmrand (1 = etwa eine Textzeile) – damit schiebst du die Meldungen an deinem HUD vorbei          |

### Dauer und Anzahl

| Option                   | Standard | Beschreibung                                                              |
| ------------------------ | -------- | ------------------------------------------------------------------------- |
| `Config.DefaultDuration` | `5000`   | Dauer in Millisekunden, wenn der Aufruf keine nennt                       |
| `Config.MinDuration`     | `1000`   | Kürzere Angaben werden auf diesen Wert angehoben                          |
| `Config.MaxDuration`     | `30000`  | Längere Angaben werden auf diesen Wert gekürzt                            |
| `Config.MaxVisible`      | `5`      | So viele Meldungen sind gleichzeitig sichtbar, ältere verschwinden zuerst |
| `Config.ProgressBar`     | `true`   | Zeitbalken unter der Meldung                                              |

### Ton und Farben

```lua
Config.Sound = {
    enabled = true,
    default = { name = 'SELECT', set = 'HUD_FRONTEND_DEFAULT_SOUNDSET' },
    error   = { name = 'ERROR',  set = 'HUD_FRONTEND_DEFAULT_SOUNDSET' },
}
Config.Colors = { success = '#3DD68C', error = '#E5484D', info = '#4C9AFF', warning = '#FF8A3D' }
```

| Option                 | Standard                                   | Beschreibung                                                                        |
| ---------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------- |
| `Config.Sound.enabled` | `true`                                     | Ton beim Einblenden an/aus                                                          |
| `Config.Sound.default` | `SELECT` / `HUD_FRONTEND_DEFAULT_SOUNDSET` | GTA-Sound für alle Typen ohne eigenen Eintrag                                       |
| `Config.Sound.error`   | `ERROR` / `HUD_FRONTEND_DEFAULT_SOUNDSET`  | Eigener Ton für Fehler; genauso kannst du `success`, `info` oder `warning` ergänzen |
| `Config.Colors`        | siehe oben                                 | Akzentfarbe je Typ (Symbol, Rand, Zeitbalken) als Hex-Wert                          |
| `Config.TestCommand`   | `true`                                     | Befehl `/notifytest` an/aus                                                         |

## Für Entwickler

### Aufruf

Client (lange Form als Tabelle oder kurze Form):

```lua
exports.pepper_notify:Notify({ title = 'Garage', message = 'Fahrzeug geparkt.', type = 'success', duration = 5000 })
exports.pepper_notify:Notify('Fahrzeug geparkt.', 'success', 5000)
```

Server (erster Wert ist die Spieler-ID, `-1` = alle Spieler):

```lua
exports.pepper_notify:Notify(source, { title = 'Bank', message = 'Du hast 500 $ erhalten.', type = 'info' })
exports.pepper_notify:Notify(-1, 'Neustart in 10 Minuten.', 'warning', 10000)
```

| Feld       | Bedeutung                                                                                                     |
| ---------- | ------------------------------------------------------------------------------------------------------------- |
| `message`  | Text (Pflicht; auch `description` oder `text` werden verstanden)                                              |
| `title`    | Fette erste Zeile (optional)                                                                                  |
| `type`     | `success`, `error`, `info` oder `warning` (Standard `info`); `inform`, `primary` → `info`, `warn` → `warning` |
| `duration` | Millisekunden (auch `length`), begrenzt auf `MinDuration`–`MaxDuration`                                       |
| `id`       | Eine Meldung mit derselben `id` ersetzt die vorige                                                            |

### Meldungen deines Frameworks umleiten

* **ESX:** in `es_extended/client/functions.lua` in `ESX.ShowNotification` den Export aufrufen: `exports.pepper_notify:Notify(message, notifyType, length)`.
* **QBCore / Qbox:** in `qb-core/client/functions.lua` in `QBCore.Functions.Notify` den Export aufrufen: `exports.pepper_notify:Notify(text, texttype, length)`.

## Befehle und Rechte

| Befehl        | Wer                           | Was                                                                      |
| ------------- | ----------------------------- | ------------------------------------------------------------------------ |
| `/notifytest` | alle Spieler (ohne ACE-Recht) | Zeigt alle vier Meldungstypen; nur aktiv bei `Config.TestCommand = true` |

Weitere Befehle, Rechte oder Tasten gibt es nicht.

## Exports und Events

| Seite  | Name                       | Aufruf                                                                                      |
| ------ | -------------------------- | ------------------------------------------------------------------------------------------- |
| Client | Export `Notify`            | `exports.pepper_notify:Notify(daten)` oder `Notify(text, typ, dauer)`                       |
| Server | Export `Notify`            | `exports.pepper_notify:Notify(spielerId, daten)` oder `Notify(spielerId, text, typ, dauer)` |
| Client | Event `pepper_notify:show` | `TriggerClientEvent('pepper_notify:show', source, { message = 'Hallo', type = 'info' })`    |

## FAQ

### Wie benutze ich Notify aus meinem Script?

Auf dem Client `exports.pepper_notify:Notify('Text', 'success')`, auf dem Server `exports.pepper_notify:Notify(source, 'Text', 'success')`. Alternativ das Event `pepper_notify:show` – Beispiele unter „Für Entwickler“.

### `/notifytest` kennt der Server nicht – was tun?

Prüfe, ob `ensure pepper_notify` in der `server.cfg` steht, der Ordner genau `pepper_notify` heißt und `Config.TestCommand = true` ist. Der Befehl wird nur angelegt, wenn der Testbefehl eingeschaltet ist.

### Wie ändere ich die Farben?

In `Config.Colors` je Typ einen Hex-Wert eintragen, z. B. `success = '#22C55E'`, danach `restart pepper_notify`.

### Die Meldungen verdecken mein HUD – wie verschiebe ich sie?

Mit `Config.Position` wählst du eine der 8 Positionen, mit `Config.Offset` schiebst du sie weiter vom Rand weg (`x` waagerecht, `y` senkrecht, 1 ≈ eine Textzeile).

### Kann ich ESX- oder QBCore-Meldungen über Pepper Notify anzeigen?

Ja. Lass `ESX.ShowNotification` bzw. `QBCore.Functions.Notify` den Export aufrufen (eine Zeile, siehe „Für Entwickler“). Die Typnamen `primary` (QBCore) und `inform` (ox\_lib) werden automatisch zu `info`.

### Funktionieren GTA-Farbcodes wie `~r~` oder HTML im Text?

Nein. Titel und Text werden als reiner Text angezeigt (`textContent`), Farbcodes und HTML erscheinen also wörtlich. Das verhindert, dass Spielertexte als HTML ausgeführt werden. Die Farbe kommt über den Typ.

### Wie schicke ich eine Meldung an alle Spieler?

Auf dem Server mit `-1` als Spieler-ID: `exports.pepper_notify:Notify(-1, 'Neustart in 10 Minuten.', 'warning', 10000)`.

### Wie verhindere ich, dass sich dieselbe Meldung stapelt?

Gib eine feste `id` mit, z. B. `{ id = 'fuel', message = 'Tank fast leer', type = 'warning' }`. Eine neue Meldung mit derselben `id` ersetzt die alte.

### Wie lange darf eine Meldung höchstens stehen?

Zwischen `Config.MinDuration` (1 Sekunde) und `Config.MaxDuration` (30 Sekunden); Werte außerhalb werden angepasst. Ohne Angabe gilt `Config.DefaultDuration` (5 Sekunden).

### Wie schalte ich den Ton aus oder ändere ihn?

`Config.Sound.enabled = false` schaltet ihn ab. Für einen anderen Ton änderst du `name`/`set` (GTA-Frontend-Sounds); für einzelne Typen ergänzt du einen Eintrag wie `success = { name = '…', set = '…' }`.

### Meldungen direkt beim Einloggen gehen verloren?

Nein. Kommen Meldungen, bevor die Oberfläche geladen ist, merkt sich der Client sie und zeigt sie, sobald die NUI bereit ist.

### Wie update ich Pepper Notify?

Ordner ersetzen und vorher deine `config.lua` sichern, danach deine Werte wieder eintragen. Was sich geändert hat, steht 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 **1.0.2**: neue Positionen `center-right` (neuer Standard) und `center-left`, dazu `Config.Offset`. Alle Änderungen stehen in der `CHANGELOG.md` im Ressourcen-Ordner.
