> 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/jobs/pepper-newspaper.md).

# Pepper Newspaper

<figure><img src="https://content.gitbook.com/content/Irecym4R4dkBNbFKaJiy/blobs/Yj7cuHo3ub9xOgcalY3a/.gitbook/assets/newspaper-cover.png" alt="Pepper Newspaper"><figcaption></figcaption></figure>

Bring echte Nachrichten auf deinen Roleplay-Server: Mit **Pepper Newspaper** schreiben Journalisten in der Redaktion eigene Ausgaben mit Schlagzeilen, Artikeln und Bildern, und Spieler kaufen die Zeitung an jedem Zeitungsautomaten der Stadt. Die Zeitung landet als Item im Inventar und wird beim Benutzen gelesen.

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

{% hint style="success" %}
**Kostenlos** – hol dir Pepper Newspaper unter [pepper-scripts.tebex.store](https://pepper-scripts.tebex.store)
{% endhint %}

### Funktionen

* Kauf der Zeitung an **jedem GTA-Zeitungsautomaten** (ox\_target, qb-target oder Taste `E`)
* **Automaten-Menü** mit aktueller Ausgabe, älteren Ausgaben, Titelgeschichte und „Schon im Inventar“
* **Zeitung bleibt im Inventar** und lässt sich beliebig oft lesen – mit Lesezeichen (ox\_inventory, qb-inventory)
* `/newsstand` markiert den **nächsten Automaten** auf Karte und Minimap
* **Beispielausgabe** mit 8 Artikeln, bis die Redaktion ihre erste eigene Zeitung veröffentlicht
* **Redaktion** für Journalisten mit bis zu 8 Artikeln, Bildern, Vorschau, Veröffentlichen und Archiv
* Rechte pro Job und Rang (Schreiben, Veröffentlichen, Verwalten) plus ACE-Recht für Admins
* Serverweite Benachrichtigung, sobald eine neue Ausgabe erscheint
* Hochwertiges Broadsheet-Design wie bei einer echten Tageszeitung
* Alle Prüfungen serverseitig, Bilder nur von erlaubten Hostern
* Deutsch & Englisch, Config, Locales und Bridge offen

### Auf einen Blick

|                    |                                                                          |
| ------------------ | ------------------------------------------------------------------------ |
| **Version**        | 1.1.0                                                                    |
| **Framework**      | ESX Legacy oder QBCore (wird automatisch erkannt)                        |
| **OneSync**        | unterstützt, nicht erforderlich                                          |
| **Abhängigkeiten** | [oxmysql](https://github.com/overextended/oxmysql)                       |
| **Optional**       | ox\_target / qb-target, ox\_inventory                                    |
| **Performance**    | ca. 0,01 ms im Leerlauf / 0,03 ms in Benutzung (Richtwert)               |
| **Auslieferung**   | Cfx.re Asset Escrow (`config/`, `locales/`, `bridge/`, `install/` offen) |

{% hint style="info" %}
**Open-Source-Variante:** Pepper Newspaper gibt es auch als **Pepper Newspaper (Open Source)** mit dem vollständigen, unverschlüsselten Quellcode – siehe [Shop](https://pepper-scripts.tebex.store).
{% endhint %}

### Installation

#### Voraussetzungen

| Voraussetzung      | Version                                            |
| ------------------ | -------------------------------------------------- |
| FiveM-Server-Build | 7290+                                              |
| Framework          | ESX Legacy oder QBCore                             |
| Datenbank          | [oxmysql](https://github.com/overextended/oxmysql) |
| Optional           | ox\_target / qb-target, ox\_inventory              |

#### Schritte

{% stepper %}
{% step %}
**Download**

Lade `pepper_newspaper` aus dem [Cfx.re Portal → Granted Assets](https://portal.cfx.re/assets/granted-assets) herunter.
{% endstep %}

{% step %}
**Kopieren**

Entpacke die Ressource nach `resources/[pepper]/pepper_newspaper` – benenne den Ordner **nicht um**.
{% endstep %}

{% step %}
**Item anlegen**

Lege das Item `newspaper` in deinem Inventar an (siehe unten) und kopiere `install/newspaper.png` in den Bilder-Ordner deines Inventars.
{% endstep %}

{% step %}
**Job anlegen**

Lege den Job `weazel` an. Bei ESX sind der Job und seine Ränge am Ende von `install/pepper_newspaper.sql` vorbereitet. Bei QBCore kannst du auch den Standard-Job `reporter` verwenden.
{% endstep %}

{% step %}
**Konfigurieren**

Passe `config/config.lua` an (Sprache, Preis, Jobs).
{% endstep %}

{% step %}
**server.cfg**

Starte die Ressource **nach** deinem Framework und deinem Inventar:

```cfg
ensure oxmysql
ensure pepper_newspaper
```

Die Datenbank-Tabellen werden beim ersten Start automatisch angelegt.
{% endstep %}
{% endstepper %}

#### Item `newspaper` einrichten

| Inventar                   | Wo                                                                | Einstellungen                                                                                          |
| -------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| **ox\_inventory**          | `ox_inventory/data/items.lua`, Bild in `ox_inventory/web/images/` | Label „Zeitung“, nicht stapelbar, schließt das Inventar, Server-Export `pepper_newspaper.useNewspaper` |
| **qb-inventory**           | `qb-core/shared/items.lua`, Bild in `qb-inventory/html/images/`   | Name `newspaper`, Bild `newspaper.png`, unique, benutzbar, schließt das Inventar                       |
| **ESX (Standardinventar)** | Datenbank-Tabelle `items`                                         | `install/pepper_newspaper.sql` importieren – die Datei enthält das Item                                |

Bei ox\_inventory ist diese Zeile im Item-Eintrag entscheidend:

```lua
server = { export = 'pepper_newspaper.useNewspaper' },
```

#### Admin-Zugriff

Admins erhalten mit dem ACE-Recht vollen Zugriff auf die Redaktion:

```cfg
add_ace group.admin pepper.newspaper.editor allow
```

### Konfiguration

Die Einstellungen liegen in `config/config.lua` (Client + Server) und `config/server.lua` (nur Server). Beide Dateien sind offen.

#### Allgemein

| Option             | Standard | Beschreibung                                                                 |
| ------------------ | -------- | ---------------------------------------------------------------------------- |
| `Config.Locale`    | `'en'`   | Sprache: `'de'` oder `'en'`                                                  |
| `Config.Framework` | `'auto'` | `'auto'`, `'esx'` oder `'qbcore'` – `auto` erkennt es\_extended oder qb-core |
| `Config.Debug`     | `false`  | Zusätzliche Konsolenausgaben zur Fehlersuche                                 |

#### Zeitungsautomaten

| Option                    | Standard                         | Beschreibung                                                                                                                              |
| ------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `Config.Price`            | `5`                              | Preis pro Ausgabe (`0` = kostenlos)                                                                                                       |
| `Config.Account`          | `'money'`                        | `'money'` (Bargeld) oder `'bank'`                                                                                                         |
| `Config.Interaction`      | `'auto'`                         | `'auto'` (ox\_target → qb-target → Taste), `'ox_target'`, `'qb-target'` oder `'key'`                                                      |
| `Config.InteractDistance` | `1.6`                            | Interaktionsabstand in Metern                                                                                                             |
| `Config.InteractKey`      | `38` (E)                         | Taste bei `'key'`                                                                                                                         |
| `Config.VendingModels`    | 10 GTA-Modelle                   | Modelle der Zeitungsautomaten – bei Bedarf weitere ergänzen                                                                               |
| `Config.Item`             | `'newspaper'`                    | Name des Items im Inventar                                                                                                                |
| `Config.ConsumeOnRead`    | `false`                          | `false` = Zeitung bleibt nach dem Lesen im Inventar, `true` = einmalig nutzbar. Ohne Item-Metadaten (ESX-Standardinventar) immer einmalig |
| `Config.BackIssues`       | `3`                              | Ältere Ausgaben, die der Automat zusätzlich zur aktuellen anbietet (`0` = nur die aktuelle, max. 10)                                      |
| `Config.FindCommand`      | `'newsstand'`                    | Befehl, der den nächsten Automaten auf der Karte markiert (`false` = aus)                                                                 |
| `Config.StandBlip`        | Punkt, orange, mit Route, 5 Min. | Markierung auf Karte und Minimap: `sprite`, `color`, `scale`, `route`, `minutes`. Verschwindet am Automaten oder nach Ablauf              |
| `Config.StandLocations`   | leer                             | Optionale feste Automaten-Standorte für den Befehl                                                                                        |

{% hint style="info" %}
Zeitungsautomaten sind Objekte der GTA-Karte. Automaten in Sichtweite findet `/newsstand` selbst. Zusätzlich merkt sich das Script jeden Ort, an dem schon einmal eine Zeitung gekauft wurde – auf einem neuen Server füllt sich die Liste also mit der Zeit. Wichtige Standorte kannst du in `Config.StandLocations` vorgeben.
{% endhint %}

#### Redaktion

| Option                      | Standard                    | Beschreibung                                                                                                                    |
| --------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `Config.Jobs`               | `weazel`, `reporter`        | Jobs mit Zugriff auf die Redaktion und der Mindestrang für `write`, `publish` und `manage`                                      |
| `Config.EditorAce`          | `'pepper.newspaper.editor'` | ACE-Recht für vollen Zugriff unabhängig vom Job                                                                                 |
| `Config.EditorCommand`      | `'newspaper'`               | Befehl zum Öffnen der Redaktion                                                                                                 |
| `Config.EditorLocations`    | leer                        | Optionale Orte, an denen die Redaktion zusätzlich per Interaktion geöffnet werden kann                                          |
| `Config.AnnounceNewEdition` | `true`                      | Alle Spieler benachrichtigen, wenn eine Ausgabe veröffentlicht wird                                                             |
| `Config.DemoEdition`        | `true`                      | Beispielausgabe mit 8 Artikeln, solange die Redaktion noch keine eigene Zeitung veröffentlicht hat. Inhalt in `config/demo.lua` |

Standard-Ränge: **weazel** – Schreiben und Veröffentlichen ab Rang 0, Verwalten ab Rang 2 · **reporter** (QBCore) – alles ab Rang 0.

#### Inhaltsgrenzen

| Option                     | Standard                          | Beschreibung                                                                                                              |
| -------------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `Config.MaxArticles`       | `8`                               | Artikel pro Ausgabe                                                                                                       |
| `Config.MaxTitleLength`    | `60`                              | Zeichen pro Titel einer Ausgabe                                                                                           |
| `Config.MaxHeadlineLength` | `120`                             | Zeichen pro Schlagzeile                                                                                                   |
| `Config.MaxBodyLength`     | `3000`                            | Zeichen pro Artikeltext                                                                                                   |
| `Config.ImageHosts`        | Imgur, Discord, Fivemanage, ImgBB | Erlaubte Bild-Hoster (nur https). Zusätzlich erlaubt: eigene Bilder aus `html/img/` der Ressource, z. B. `img/harbor.jpg` |

#### Nur Server (`config/server.lua`)

| Option                      | Standard | Beschreibung                                                                             |
| --------------------------- | -------- | ---------------------------------------------------------------------------------------- |
| `ServerConfig.LogWebhook`   | `''`     | Optionaler Discord-Webhook für Logs (Veröffentlichungen, Löschungen, Käufe) – leer = aus |
| `ServerConfig.LogPurchases` | `false`  | Zusätzlich jeden Kauf protokollieren                                                     |
| `ServerConfig.VersionUrl`   | `''`     | Optionaler Update-Hinweis in der Serverkonsole – leer = aus                              |

#### Framework-Bridge

Die Dateien in `bridge/` sind offen. Dort kannst du die Anbindung an dein Framework, Inventar oder Target-System anpassen, ohne den geschützten Kern anzufassen.

### Nutzung

#### Für Spieler

{% stepper %}
{% step %}
**Automaten finden**

`/newsstand` markiert den nächsten Zeitungsautomaten mit Symbol und Route auf Karte und Minimap. Die Markierung verschwindet, sobald du am Automaten stehst.
{% endstep %}

{% step %}
**Kaufen**

Interagiere mit dem Automaten (ox\_target, qb-target oder `E`). Die Auslage zeigt die aktuelle Ausgabe und ältere Ausgaben – jeweils mit Titelgeschichte und dem Hinweis, ob du sie schon im Inventar hast. Bezahlt wird mit Bargeld oder per Bank.
{% endstep %}

{% step %}
**Lesen**

Die Zeitung landet als Item **newspaper** in deinem Inventar. Benutze sie, um die Ausgabe im Broadsheet-Design zu lesen.
{% endstep %}

{% step %}
**Behalten**

Die Zeitung bleibt in deinem Inventar. Du kannst sie jederzeit erneut lesen und landest wieder an der Stelle, an der du aufgehört hast.
{% endstep %}
{% endstepper %}

#### Für Journalisten

Öffne die Redaktion mit `/newspaper` (Job `weazel`, bei QBCore auch `reporter`, oder ACE-Recht).

| Aktion                                                             | Wer (Standard)            |
| ------------------------------------------------------------------ | ------------------------- |
| Ausgaben schreiben – bis zu 8 Artikel mit Schlagzeilen und Bildern | ab dem Rang für `write`   |
| Vorschau ansehen und Ausgabe veröffentlichen                       | ab dem Rang für `publish` |
| Ausgaben löschen oder archivieren                                  | ab dem Rang für `manage`  |

Wird eine Ausgabe veröffentlicht, werden alle Spieler benachrichtigt (`Config.AnnounceNewEdition`).

{% hint style="info" %}
Mit dem ESX-Standardinventar (ohne Item-Metadaten) ist die Zeitung weiterhin einmalig nutzbar und zeigt immer die aktuelle Ausgabe. Für alle Funktionen empfehlen wir ox\_inventory oder qb-inventory.
{% endhint %}

{% hint style="info" %}
Bilder müssen `https`-Links von einem erlaubten Hoster sein (`Config.ImageHosts`), z. B. Imgur, Discord, Fivemanage oder ImgBB.
{% endhint %}

### Befehle & Exports

#### Befehle

| Befehl          | Wer                                  | Funktion                                           |
| --------------- | ------------------------------------ | -------------------------------------------------- |
| `/newspaper`    | Journalisten, Admins                 | Redaktion öffnen                                   |
| `/newsstand`    | Alle                                 | Nächsten Zeitungsautomaten auf der Karte markieren |
| `newspaperdemo` | Konsole, ACE `command.newspaperdemo` | Beispielausgabe erneut veröffentlichen             |

Die Befehlsnamen kannst du über `Config.EditorCommand` und `Config.FindCommand` ändern.

#### Rechte

| Recht                         | Beschreibung                                            |
| ----------------------------- | ------------------------------------------------------- |
| `Config.Jobs`                 | Mindestrang pro Job für `write`, `publish` und `manage` |
| ACE `pepper.newspaper.editor` | Voller Zugriff auf die Redaktion unabhängig vom Job     |

#### Exports (Server)

| Export                | Rückgabe                                                                                |
| --------------------- | --------------------------------------------------------------------------------------- |
| `getCurrentEdition()` | Aktuelle Ausgabe (id, title, articles, author, publishedAt, price) oder `nil`           |
| `useNewspaper`        | Item-Export für ox\_inventory (wird im Item-Eintrag verwendet, nicht direkt aufgerufen) |

Beispiel:

```lua
local edition = exports.pepper_newspaper:getCurrentEdition()
```

### FAQ

| Problem                                 | Lösung                                                                                            |
| --------------------------------------- | ------------------------------------------------------------------------------------------------- |
| „Kein unterstütztes Framework gefunden“ | `es_extended` bzw. `qb-core` muss in der `server.cfg` **vor** `pepper_newspaper` starten.         |
| Item lässt sich nicht benutzen          | Prüfe bei ox\_inventory den Item-Eintrag `server = { export = 'pepper_newspaper.useNewspaper' }`. |
| Item hat kein Bild                      | Kopiere `install/newspaper.png` in den Bilder-Ordner deines Inventars.                            |
| Bild wird abgelehnt                     | Nur `https`-Links von Hostern aus `Config.ImageHosts` sind erlaubt.                               |
| Redaktion öffnet sich nicht             | Prüfe Job und Rang in `Config.Jobs` oder vergib das ACE-Recht `pepper.newspaper.editor`.          |
| Keine Interaktion am Automaten          | Prüfe `Config.Interaction` – bei `'key'` drückst du `E` direkt am Automaten.                      |

<details>

<summary>Ist Pepper Newspaper wirklich kostenlos?</summary>

Ja. Das Script ist im Shop kostenlos. Zusätzlich gibt es eine Open-Source-Variante mit dem vollständigen Quellcode.

</details>

<details>

<summary>Kann die Zeitung für Spieler kostenlos sein?</summary>

Ja – setze `Config.Price = 0`.

</details>

<details>

<summary>Kann ich einen anderen Job als weazel verwenden?</summary>

Ja. Trag deinen Job mit den gewünschten Rängen in `Config.Jobs` ein.

</details>

### Changelog

#### 1.1.0 – 2026-10-10

**Neu**

* Automaten-Menü mit der aktuellen Ausgabe und bis zu `Config.BackIssues` älteren Ausgaben, jeweils mit Titelgeschichte
* Kennzeichnung „Schon im Inventar“ am Automaten (ox\_inventory, qb-inventory)
* Lesezeichen: Beim erneuten Öffnen geht es an der zuletzt gelesenen Stelle weiter
* Befehl `/newsstand` markiert den nächsten Zeitungsautomaten mit Symbol und Route auf Karte und Minimap
* Beispielausgabe mit 8 Artikeln, solange die Redaktion noch keine eigene Zeitung veröffentlicht hat (`Config.DemoEdition`, `config/demo.lua`)
* Eigene Bilder aus `html/img/` der Ressource als Artikelbild

**Geändert**

* Die Zeitung bleibt nach dem Lesen im Inventar (`Config.ConsumeOnRead = true` stellt das alte Verhalten wieder her). Ohne Item-Metadaten (ESX-Standardinventar) bleibt sie einmalig nutzbar.
* Die Interaktion am Automaten öffnet die Auslage statt sofort zu kaufen

🧪 **Getestet auf unserem Dev-Server:** Wir testen alle Skripte selbstverständlich permanent auf unserem eigenen Dev-Server „Pepper Scripts“.

#### 1.0.0 – 2026-09-25

**Erste Version**

* Zeitungsautomaten: Kauf an allen GTA-Zeitungsautomaten per ox\_target, qb-target oder Taste `E`
* Einmalig nutzbares Zeitungs-Item, das sich seine Ausgabe merkt (ox\_inventory, qb-inventory, ESX)
* Redaktion für Journalisten (Job `weazel`, QBCore `reporter`): Ausgaben mit bis zu 8 Artikeln und Bildern schreiben, Vorschau, Veröffentlichen, Archivieren
* Rechte pro Job und Rang plus ACE-Recht `pepper.newspaper.editor`
* Benachrichtigung aller Spieler bei einer neuen Ausgabe, optionales Discord-Webhook-Log
* Deutsch und Englisch
