> 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/activities/pepper-fishing.md).

# Pepper Fishing

Angeln mit Drill-Minispiel, 83 Fischarten, 12 Boss-Fischen, Level 1–100 mit Skill-Baum, Booten und Sonar, Fischmarkt, Turnieren, Angelschein und Kontrolle für ESX, QBCore und Qbox.

Angeln war auf den meisten Servern: Taste drücken, Balken abwarten, Fisch im Inventar. Mit **Pepper Fishing** werfen deine Spieler an jedem Gewässer aus, setzen beim Biss den Anschlag und drillen den Fisch über die Schnurspannung – zu viel Zug und die Schnur reißt, zu wenig und er schlitzt aus. Danach zeigt die Fangkarte, was am Haken hing.

Geangelt wird mit der **Angelrute** (Item `fishing_rod`), alles Weitere steht im **Angelbuch** (Item `fishing_book`): Fischlexikon, Ausrüstung, Skill-Baum, Aufträge, Fischmarkt, Turniere, Ranglisten und Karte.

{% hint style="success" %}
**Pepper Fishing holen:** [pepper-scripts.tebex.store](https://pepper-scripts.tebex.store)
{% endhint %}

{% 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="warning" %}
**Koordinaten prüfen:** Alle Positionen in `config/zones.lua` und `config/locations.lua` (Gewässer, Hotspots, Stationen, Bootsstege, Schatzorte) sind Näherungen. Geh sie nach der Installation einmal ab und passe einzelne Zeilen an.
{% endhint %}

### Funktionen

* **Drill-Minispiel** – Schnurspannung im grünen Bereich halten, Fluchten, Abtauchen und Sprünge parieren; Schnurbruch und Ausschlitzen inklusive
* **83 Fischarten** in 5 Gewässertypen (Küste, Hochsee, See, Fluss, Sumpf) – 28 gewöhnlich, 25 ungewöhnlich, 19 selten, 11 episch
* **12 legendäre Boss-Fische** mit Sichtungen, Drill in 3–5 Akten, serverweiter Meldung, Hall of Fame und Trophäe
* **Level 1–100** mit 10 Rängen – Dauer per Config, Standard rund 150 Spielstunden (Simulation)
* **Skill-Baum** mit 4 Zweigen (Technik, Gespür, Handel, Natur) und 24 Perks
* **Fang-Kamera und Fangkarte** – Seltenheit, Gewicht, Länge, Qualität, Rekord-Stempel; behalten oder zurücksetzen
* **Tageszeit, Wetter, Gezeiten und Saison** bestimmen, was beißt – mit Beißvorhersage im Angelbuch
* **Ausrüstung mit Haltbarkeit** – 6 Ruten, 5 Rollen, 5 Schnüre, 4 Haken, 3 Sonare, dazu 12 Köder
* **Boote & Sonar** – Verleih an 4 Stationen mit 8 Booten, Angeln vom eigenen Boot, Anker per Taste, Sonar zeigt Schwärme und Hotspots
* **Fischlexikon** als Sammelalbum mit Bestwerten, Server-Rekorden und Ranglisten, **36 Erfolge**
* **Fischmarkt** mit schwankenden Kursen, täglich 3 gesuchte Arten, Tages- und Wochenaufträge, Restaurant-Lieferungen
* **Turniere** mit Live-Wertung und Preisgeld, **Angel-Saison** mit Belohnungen
* **Angelschein, Schonzeiten, geschützte Arten, Sperrzonen, Schwarzmarkt** – und **Kontrolle** durch Polizei oder Ranger
* **Beifang und Schätze** – Flaschenpost mit Schatzkarte, Truhen, Perlen
* **124 fertige ox\_inventory-Bilder**, Verwaltungsseite im Angelbuch, Discord-Webhooks, Server-Exports
* Deutsch & Englisch, Config, Sprachdateien, Bridges und Install-Dateien offen

### Auf einen Blick

|                              |                                                                                                                                                                      |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Version**                  | 1.0.0                                                                                                                                                                |
| **Framework**                | ESX Legacy (`es_extended`), QBCore (`qb-core`) oder Qbox (`qbx_core`) – automatische Erkennung                                                                       |
| **FiveM-Server**             | Build 7290 oder neuer, **OneSync** erforderlich                                                                                                                      |
| **Abhängigkeiten (Pflicht)** | [oxmysql](https://github.com/overextended/oxmysql), [ox\_lib](https://github.com/overextended/ox_lib), [ox\_inventory](https://github.com/overextended/ox_inventory) |
| **Interaktion**              | ox\_target, qb-target oder TextUI (`Config.Interaction`)                                                                                                             |
| **Optional**                 | Dispatch: ps-dispatch, cd\_dispatch, qs-dispatch, rcore\_dispatch oder core\_dispatch · Fahrzeugschlüssel und Tank für Mietboote über offene Bridges                 |
| **Datenbank**                | MySQL oder MariaDB – Tabellen werden automatisch angelegt                                                                                                            |
| **Sprachen**                 | Deutsch, Englisch                                                                                                                                                    |
| **Auslieferung**             | Cfx.re Asset Escrow (`config/`, `locales/`, `bridge/`, `install/` offen)                                                                                             |

### Seiten

* **Installation** – Schritt für Schritt, mit Items und Bildern für ox\_inventory
* **Konfiguration** – Level, Geld, Angelschein, Kontrolle, Turniere, Boote
* **Spielablauf** – Angeln, Angelbuch, Stationen, Boote, Turniere, Bosse, Schätze
* **Befehle & Exports** – Befehle, Tasten, Rechte, Exports, Webhooks, Dispatch, Bridges
* **FAQ** – Fragen und Fehlerbehebung
* **Changelog**

### Installation

Arbeite die Schritte in der angegebenen Reihenfolge ab – nach jedem Schritt gibt es einen **Kontrollpunkt**.

{% hint style="warning" %}
**Dateien immer mit einem Text-Editor öffnen**, zum Beispiel [Visual Studio Code](https://code.visualstudio.com/) oder [Notepad++](https://notepad-plus-plus.org/) – niemals mit Word oder WordPad.
{% endhint %}

#### Schritt 1 – Voraussetzungen prüfen

| Was                                                                                                          | Wozu                                                            | Pflicht?   |
| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ---------- |
| FiveM-Server **Build 7290 oder neuer**                                                                       | ältere Server starten das Script nicht                          | ja         |
| **OneSync** eingeschaltet                                                                                    | Wurfweite, Positionen und Boote werden am Server geprüft        | ja         |
| **MySQL/MariaDB** + **oxmysql**                                                                              | Profile, Lexikon, Rekorde, Markt, Turniere, Saison              | ja         |
| **ox\_lib**                                                                                                  | Server-Aufrufe, Zonen und Hinweise                              | ja         |
| **ox\_inventory**                                                                                            | Fische tragen Gewicht, Länge und Qualität in den Item-Metadaten | ja         |
| **ESX Legacy**, **QBCore** oder **Qbox**                                                                     | Charaktere, Geld, Jobs                                          | genau eins |
| **ox\_target** oder **qb-target**                                                                            | NPCs ansprechen – ohne Target läuft es über TextUI              | nein       |
| Dispatch: ps-dispatch, cd\_dispatch, qs-dispatch, rcore\_dispatch, core\_dispatch                            | Alarm an Polizei/Ranger – ohne läuft der eingebaute Alarm       | nein       |
| Fahrzeugschlüssel: qb-vehiclekeys, Renewed-Vehiclekeys, qbx\_vehiclekeys, wasabi\_carlock, MrNewbVehicleKeys | Schlüssel für das Mietboot                                      | nein       |
| Tank: ox\_fuel, LegacyFuel, cdn-fuel, ps-fuel, lj-fuel, lc\_fuel, qb-fuel                                    | Mietboote werden vollgetankt übergeben                          | nein       |

**OneSync:** in txAdmin unter **Settings → FXServer** auf **On** – ohne txAdmin `set onesync on` ganz oben in die `server.cfg`.

{% hint style="success" %}
**Kontrollpunkt:** Beim Serverstart steht für `oxmysql`, `ox_lib`, dein Framework und `ox_inventory` jeweils `Started resource <name>` in der Konsole.
{% endhint %}

#### Schritt 2 – Herunterladen und entpacken

1. [Cfx.re-Portal → Granted Assets](https://portal.cfx.re/assets/granted-assets) öffnen und **pepper\_fishing** herunterladen.
2. Den Ordner `pepper_fishing` nach `resources/[pepper]/` kopieren.

```
resources/
└── [pepper]/
    └── pepper_fishing/
        ├── bridge/
        ├── client/
        ├── config/
        │   ├── config.lua
        │   ├── fish.lua
        │   ├── gear.lua
        │   ├── locations.lua
        │   ├── progression.lua
        │   ├── server.lua
        │   ├── skills.lua
        │   └── zones.lua
        ├── html/
        ├── install/
        │   ├── images/
        │   ├── ox_items.lua
        │   ├── ox_items_en.lua
        │   └── pepper_fishing.sql
        ├── locales/
        ├── server/
        ├── shared/
        └── fxmanifest.lua
```

{% hint style="danger" %}
**Den Ordnernamen `pepper_fishing` nie ändern.** Die ox\_inventory-Exports der Items nutzen den Ressourcennamen.
{% endhint %}

{% hint style="warning" %}
**Asset Escrow:** Das Script startet nur auf einem Server, dessen Lizenzschlüssel (`sv_licenseKey`) zum selben Cfx.re-Konto gehört, mit dem du gekauft hast. Mehr dazu: **Asset Escrow**.
{% endhint %}

#### Schritt 3 – Items und Bilder eintragen

Pepper Fishing bringt 124 Items mit – jedes mit fertigem Bild:

| Item                                                                                       | Zweck                                                                          |
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
| `fishing_rod`                                                                              | Angelrute – benutzen = Angelmodus an/aus                                       |
| `fishing_book`                                                                             | Angelbuch                                                                      |
| `fishing_license`                                                                          | optionales Dokument zum Angelschein (nur bei `Config.License.GiveItem = true`) |
| `bait_*`, `lure_*`                                                                         | 12 Köder                                                                       |
| `fish_<art>`                                                                               | 83 Fischarten                                                                  |
| `fish_legend_<id>`                                                                         | 12 Boss-Trophäen                                                               |
| `junk_*`                                                                                   | 8 Beifang-Items                                                                |
| `message_bottle`, `treasure_map`, `treasure_chest`, `pearl`, `old_coin`, `antique_compass` | Schätze und Wertsachen                                                         |

1. Öffne `install/ox_items.lua` (deutsche Namen) bzw. `install/ox_items_en.lua` (englische Namen).
2. Kopiere **nur die Einträge** zwischen `return {` und der letzten `}`.
3. Füge sie in `ox_inventory/data/items.lua` **vor der allerletzten schließenden Klammer `}`** ein.
4. Kopiere alle Dateien aus `install/images/` nach `ox_inventory/web/images/`.

Rute, Angelbuch, Flaschenpost, Schatzkarte und Schatztruhe enthalten die Zeile `server = { export = 'pepper_fishing.<item>' }` – sie macht das Item benutzbar und muss drinbleiben.

{% hint style="success" %}
**Kontrollpunkt:** Nach einem Neustart kannst du dir die Rute geben (z. B. `/giveitem <id> fishing_rod 1`) und sie erscheint mit Namen und Bild im Inventar.
{% endhint %}

#### Schritt 4 – Datenbank

Nichts zu tun: Die Ressource legt beim ersten Start alle Tabellen (`pepper_fishing_*`) selbst an. Hat dein Datenbank-Benutzer **kein CREATE-Recht**, importiere vorher `install/pepper_fishing.sql`.

#### Schritt 5 – Config prüfen

Öffne `config/config.lua` und prüfe mindestens:

* `Config.Locale = 'de'` (oder `'en'`)
* `Config.Framework = 'auto'` – erkennt Qbox, ESX und QBCore selbst
* `Config.Interaction = 'auto'` – nimmt ox\_target, sonst qb-target, sonst TextUI
* `Config.Economy` und `Config.DirtyMoney` – Konten für Verkauf und Schwarzmarkt
* `Config.License` – Angelschein-Pflicht, Preise und Laufzeit
* `Config.Control.Jobs` – welche Jobs Angler kontrollieren dürfen (Standard: `police`, `sheriff`, `ranger`)
* `Config.Boats.Anchor` – Taste (`H`) und Befehl (`/anker`) für den Anker

Webhooks stehen in `config/server.lua`. Alle Schlüssel mit Standardwert: **Konfiguration**.

#### Schritt 6 – server.cfg

Trag Pepper Fishing **nach** allen Abhängigkeiten ein:

```cfg
ensure oxmysql
ensure ox_lib
ensure es_extended      # bzw. qb-core oder qbx_core
ensure ox_inventory
# optional: ox_target bzw. qb-target, dein Dispatch-System
ensure pepper_fishing
```

Admin-Recht vergeben (empfohlen):

```cfg
add_ace group.admin pepper_fishing.admin allow
```

{% hint style="warning" %}
**Reihenfolge beachten:** Läuft beim Start von `pepper_fishing` kein Framework, meldet die Konsole das in roter Schrift und das Script fällt auf einen Notbetrieb ohne Framework zurück (Identität = Lizenz, Geld = Item `money`) – die Spielerdaten passen dann nicht zu deinen Charakteren. Das Framework muss deshalb **vor** `pepper_fishing` stehen.
{% endhint %}

#### Schritt 7 – Erster Start

1. Server starten. In der Konsole erscheint `Pepper Fishing 1.0.0 gestartet (Framework: esx, Arten: 83, Server-Rekorde: 0, Saison: …)`.
2. Im Spiel zu einem Angelshop gehen (Blip auf der Karte) und Rute, Angelbuch, Köder und Angelschein kaufen.
3. Ans Wasser gehen, die Rute benutzen, auswerfen.
4. **Koordinaten prüfen:** Angelshops, Fischhändler, Bootsverleih, Restaurants und Schwarzmarkt-Orte einmal abgehen. Die Positionen in `config/locations.lua` und `config/zones.lua` sind Näherungen – das Zonen-Debug auf der Seite **Verwaltung** im Angelbuch blendet Zonen, Hotspots und Schwärme im Spiel ein.

{% hint style="success" %}
**Kontrollpunkt:** Die Konsole zeigt das richtige Framework und 83 Arten, das Angelbuch öffnet sich, und der erste Fisch landet mit Gewicht und Länge im Inventar.
{% endhint %}

{% hint style="info" %}
Probleme? Siehe **FAQ**.
{% endhint %}

### Konfiguration

| Datei                    | Inhalt                                                                        |
| ------------------------ | ----------------------------------------------------------------------------- |
| `config/config.lua`      | alle allgemeinen Einstellungen für Client und Server                          |
| `config/fish.lua`        | 83 Fischarten, 12 Boss-Fische, Beifang, Feinabstimmung des Fangs              |
| `config/gear.lua`        | Ruten, Rollen, Schnüre, Haken, Sonare, Köder                                  |
| `config/skills.lua`      | Skill-Baum (4 Zweige, 24 Perks)                                               |
| `config/zones.lua`       | Gewässer, Hotspots, Sperrzonen, Schwarm-Gebiete                               |
| `config/locations.lua`   | Angelshops, Fischhändler, Restaurants, Schwarzmarkt, Bootsverleih, Schatzorte |
| `config/progression.lua` | Ränge, Freischaltungen, Aufträge, Lieferungen, Erfolge, Saison-Belohnungen    |
| `config/server.lua`      | Webhooks, Admin-ACE – wird **nie** an Clients gesendet                        |

Zeiten mit „ms“ sind Millisekunden, Geld ist immer ganzzahlig, Gewichte in Gramm.

{% hint style="warning" %}
Alle Koordinaten in `config/zones.lua` und `config/locations.lua` sind **Näherungen**. Prüfe sie auf deinem Server.
{% endhint %}

#### Grundlagen

| Option               | Standard                         | Bedeutung                                                                         |
| -------------------- | -------------------------------- | --------------------------------------------------------------------------------- |
| `Config.Locale`      | `'de'`                           | Sprache (`de` / `en`) – Ordner in `locales/`                                      |
| `Config.Framework`   | `'auto'`                         | `auto`, `esx`, `qbcore`, `qbox` (`auto` prüft qbx\_core → es\_extended → qb-core) |
| `Config.Interaction` | `'auto'`                         | `auto` (ox\_target → qb-target → TextUI), `ox_target`, `qb-target`, `textui`      |
| `Config.Command`     | `false`                          | optionaler Chat-Befehl (z. B. `'angelbuch'`) – öffnet das Angelbuch **ohne** Item |
| `Config.Debug`       | `false`                          | zusätzliche Konsolenausgaben zur Fehlersuche                                      |
| `Config.Currency`    | `'$'`                            | Währungszeichen im Angelbuch                                                      |
| `Config.Items`       | `fishing_rod`, `fishing_book`, … | Item-Namen (müssen in ox\_inventory angelegt sein)                                |
| `Config.Keys`        | siehe **Befehle & Exports**      | GTA-Control-IDs                                                                   |
| `Config.Hud.Scale`   | `1.0`                            | Größe des Angel-HUDs (0.8–1.3)                                                    |

#### Rechte

Admin = ACE `pepper_fishing.admin` **oder** eine Gruppe aus `Config.AdminGroups` (`admin`, `superadmin`, `god`). Admins haben automatisch alle Rechte. Alle Rechte werden bei **jedem** Server-Aufruf neu geprüft.

| Recht        | Wofür                                                                           | Standard                                                                                         |
| ------------ | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| `tournament` | Turniere erstellen und abbrechen                                                | Gruppe `admin`, ACE `pepper_fishing.tournament`                                                  |
| `control`    | Angler kontrollieren (Schein prüfen, beschlagnahmen, Bußgeld, Schein entziehen) | Jobs `police`, `sheriff`, `ranger` ab Dienstgrad 0, Gruppe `admin`, ACE `pepper_fishing.control` |

Jede erfüllte Bedingung reicht:

```lua
Config.Permissions = {
    tournament = {
        ace = 'pepper_fishing.tournament',  -- add_ace group.mod pepper_fishing.tournament allow
        groups = { 'admin' },               -- Framework-Gruppen
        jobs = {},                          -- z. B. { fisher = 2 } = Job ab Dienstgrad 2
        items = {},                         -- Item im Inventar
        everyone = false,                   -- true = jeder Spieler
    },
}
```

#### Auswerfen, Biss, Drill

| Option                                            | Standard                                 | Bedeutung                                                                                                                   |
| ------------------------------------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `Config.Cast.MinPower`                            | `0.25`                                   | Mindestkraft eines Wurfs (0–1) – Mindestweite = Wurfweite der Rute × 0,25                                                   |
| `Config.Cast.ChargeTime`                          | `1400`                                   | ms, bis die Kraftanzeige voll ist                                                                                           |
| `Config.Cast.Cooldown`                            | `1500`                                   | ms Pause zwischen zwei Würfen                                                                                               |
| `Config.Cast.MaxRangeSlack`                       | `8.0`                                    | m Toleranz des Servers zusätzlich zur Wurfweite                                                                             |
| `Config.Bite.MinDelay` / `MaxDelay`               | `6000` / `38000`                         | früheste / späteste Beißzeit in ms                                                                                          |
| `Config.Bite.Window`                              | `1600`                                   | ms Anschlag-Fenster nach dem Biss                                                                                           |
| `Config.Fight.Difficulty`                         | `1.0`                                    | Kraft aller Fische: 0.8 = leichter, 1.2 = härter                                                                            |
| `Config.Presentation.Camera`                      | `true`                                   | Kamerafahrt beim Fang (`false` = nur Fangkarte)                                                                             |
| `Config.Presentation.Duration`                    | `6000`                                   | ms Kamerafahrt – die Fangkarte bleibt stehen, bis der Spieler entscheidet (nach 30 s entscheidet der Server)                |
| `Config.Catch.JunkChance` (`config/fish.lua`)     | `0.07`                                   | Chance auf Beifang statt Fisch (im Sumpf × 1,5, im Fluss × 1,2, auf Hochsee × 0,5)                                          |
| `Config.Catch.TreasureChance` (`config/fish.lua`) | `0.012`                                  | Chance auf Schatz-Beifang (Flaschenpost, Truhe, Perle)                                                                      |
| `Config.Catch.MaxItemWeight` (`config/fish.lua`)  | `10000`                                  | höchstes Inventargewicht eines Fisch-Items in Gramm (0 = echtes Gewicht) – das echte Fanggewicht bleibt am Item gespeichert |
| `Config.GearWear` (`config/gear.lua`)             | Fang `1` je Teil, Schnurbruch Schnur `8` | so viel Haltbarkeit kostet ein Fang, ein Schnurbruch, ein Ausschlitzen                                                      |

#### Level

XP für Level `l → l+1`: `floor(Base + Factor × l ^ Exponent)`.

| Option                                      | Standard               | Bedeutung                                               |
| ------------------------------------------- | ---------------------- | ------------------------------------------------------- |
| `Config.Level.Max`                          | `100`                  | höchstes Level                                          |
| `Config.Level.XpMultiplier`                 | `1.0`                  | skaliert **alle** XP-Gewinne (2.0 = doppelt so schnell) |
| `Config.Level.Base` / `Factor` / `Exponent` | `120` / `4.3` / `1.62` | Level-Kurve – nur für Profis                            |
| `Config.Level.ReleaseBonus`                 | `0.25`                 | +25 % XP beim Zurücksetzen                              |
| `Config.Level.FirstCatchBonus`              | `1.0`                  | +100 % XP beim ersten Fang einer Art                    |
| `Config.Level.RecordBonus`                  | `0.25`                 | +25 % XP bei persönlichem Rekord                        |
| `Config.Level.PointsPerLevel`               | `1`                    | Skillpunkte je Level-Aufstieg                           |
| `Config.Skills.RespecCost`                  | `25000`                | Kosten für das Zurücksetzen aller Skillpunkte           |

{% hint style="info" %}
Mit den Standardwerten dauert Level 100 rund 150 Spielstunden. Das ist das Ergebnis einer Simulation in den Tests der Ressource – auf deinem Server hängt es davon ab, wie deine Spieler angeln.
{% endhint %}

Freischaltungen per Level (`config/progression.lua`): Turniere ab 5, Restaurant-Lieferungen ab 8, Wochenaufträge ab 10, Boss-Fische ab 20. Ausrüstung, Köder, Boote und Arten haben ihr eigenes `minLevel`.

#### Geld und Markt

| Option                                                | Standard                                   | Bedeutung                                                                        |
| ----------------------------------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------- |
| `Config.Economy.Account`                              | `'cash'`                                   | Konto für Verkauf, Käufe, Miete, Aufträge (`cash` / `bank`)                      |
| `Config.Economy.PriceMultiplier`                      | `1.0`                                      | skaliert **alle** Fischpreise                                                    |
| `Config.DirtyMoney`                                   | ESX `black_money`, QBCore/Qbox `cash`      | Konto für Schwarzmarkt-Erlöse je Framework                                       |
| `Config.Market.Min` / `Max`                           | `0.6` / `1.5`                              | tiefster / höchster Marktfaktor                                                  |
| `Config.Market.DropPerKg`                             | `0.006`                                    | so stark sinkt der Faktor je verkauftem Kilogramm                                |
| `Config.Market.MaxDropPerSale`                        | `0.04`                                     | höchstens so viel je verkauftem Fisch                                            |
| `Config.Market.RecoverPerMinute`                      | `0.004`                                    | Erholung Richtung 1.0 je Minute                                                  |
| `Config.Market.WantedCount` / `WantedBonus`           | `3` / `0.5`                                | gesuchte Arten je Tag / Aufschlag (+50 %)                                        |
| `Config.Locations.shopItems` (`config/locations.lua`) | Rute `250`, Angelbuch `150`                | Preise der Items im Angelshop – Köder und Ausrüstung stehen in `config/gear.lua` |
| `Config.QuestRules` (`config/progression.lua`)        | `Daily = 3`, `Weekly = 2`                  | Aufträge je Spieler                                                              |
| `Config.Deliveries` (`config/progression.lua`)        | `PerRestaurant = 3`, Aufschlag `1.6`–`2.2` | Bestellungen je Restaurant und Tag, Aufschlag auf den Grundpreis                 |

Preis = `$/kg × kg × Qualität × Marktfaktor`.

#### Angelschein, illegales Angeln, Kontrolle

| Option                                      | Standard                              | Bedeutung                                                                                               |
| ------------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| `Config.License.Required`                   | `true`                                | Angeln ohne Schein ist ein Verstoß (geht trotzdem, erhöht den Verdacht)                                 |
| `Config.License.Days`                       | `0`                                   | Laufzeit in Echt-Tagen (0 = dauerhaft)                                                                  |
| `Config.License.Prices`                     | `basic = 2500`, `sea = 12000`         | Binnengewässer + Küste / Hochsee                                                                        |
| `Config.License.GiveItem`                   | `false`                               | zusätzlich das Item `fishing_license` ausgeben                                                          |
| `Config.Illegal.MinLevel`                   | `15`                                  | ab diesem Level findet man den Schwarzmarkt-Händler                                                     |
| `Config.Illegal.BlackMarketFactor`          | `1.8`                                 | Schwarzmarkt zahlt das 1,8-Fache                                                                        |
| `Config.Illegal.DailyKeepLimit`             | `0`                                   | Tagesfanglimit behaltener Fische (0 = aus)                                                              |
| `Config.Illegal.Suspicion`                  | `4` / `25` / `15` / `12` / `6`        | Verdacht je Verstoß: kein Schein / geschützt / Schonzeit / Sperrzone / über Limit; Abbau 0,5 pro Minute |
| `Config.Illegal.Dispatch`                   | `0.03` / `0.004` / `0.45` / `300`     | Grundchance / + Verdacht × Faktor / Maximum / Cooldown in Sekunden                                      |
| `Config.Illegal.Dispatch.Mode` / `BlipTime` | nicht eingetragen (= `'auto'` / `90`) | optional: Dispatch-System und Blip-Dauer in Sekunden – siehe **Befehle & Exports**                      |
| `Config.Illegal.HiddenForJobs`              | `police`, `sheriff`, `ranger`         | diese Jobs sehen den Schwarzmarkt-Händler nicht                                                         |
| `Config.Illegal.NightOnly`                  | `true`                                | Händler steht nur nachts (21–5 Uhr Spielzeit)                                                           |
| `Config.Control.Jobs`                       | `police`, `sheriff`, `ranger`         | Job = Mindest-Dienstgrad                                                                                |
| `Config.Control.Command`                    | `'fishcheck'`                         | Befehl für die Kontrolle (`false` = nur per Target)                                                     |
| `Config.Control.Distance`                   | `4.0`                                 | so nah (m) muss der kontrollierte Spieler stehen                                                        |
| `Config.Control.Fines`                      | 6 Einträge, 1.500–8.000               | Bußgeldkatalog                                                                                          |
| `Config.Control.RevokeDays`                 | `3`                                   | Schein-Entzug in Echt-Tagen                                                                             |
| `Config.Control.FineAccount`                | `'bank'`                              | von diesem Konto wird das Bußgeld abgebucht                                                             |

{% hint style="info" %}
**RP-Idee:** Lege einen Job `ranger` an und trage ihn in `Config.Control.Jobs` ein – dann ist die Fischereiaufsicht eine echte Rolle auf deinem Server.
{% endhint %}

#### Zonen, Saison, Schwärme

| Option                      | Standard                                      | Bedeutung                                                           |
| --------------------------- | --------------------------------------------- | ------------------------------------------------------------------- |
| `Config.Zones.DeepDepth`    | `25.0`                                        | ab dieser Wassertiefe (m) gilt Meer als Hochsee                     |
| `Config.Zones.DeepMinLevel` | `15`                                          | Hochsee-Fische beißen ab diesem Level (nur vom Boot)                |
| `Config.Zones.List`         | 11 Binnengewässer                             | benannte Seen, Flüsse und der Sumpf – alles andere Wasser ist Meer  |
| `Config.Zones.Hotspots`     | 12                                            | feste Stellen mit Bonus – je einer ist die Heimat eines Boss-Fischs |
| `Config.Zones.Restricted`   | 4                                             | Sperrzonen: Angeln ist dort illegal, bringt aber bessere Chancen    |
| `Config.Season.RotateDays`  | `7`                                           | Jahreszeiten wechseln alle 7 Echt-Tage                              |
| `Config.League.Days`        | `30`                                          | Länge einer Angel-Saison (Rangliste mit Belohnungen für die Top 25) |
| `Config.Shoals`             | alle `10` min, `25` min Lebensdauer, max. `6` | wandernde Schwärme (nur per Sonar sichtbar)                         |

#### Turniere

| Option                                         | Standard                                                                                                  | Bedeutung                                                                                    |
| ---------------------------------------------- | --------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| `Config.Tournaments.MinPlayers`                | `2`                                                                                                       | Mindestteilnehmer, sonst Absage (Startgeld zurück)                                           |
| `Config.Tournaments.MaxEntryFee`               | `25000`                                                                                                   | höchstes Startgeld                                                                           |
| `Config.Tournaments.HouseCut`                  | `0.05`                                                                                                    | 5 % des Topfs werden einbehalten                                                             |
| `Config.Tournaments.MinMinutes` / `MaxMinutes` | `10` / `60`                                                                                               | Dauer                                                                                        |
| `Config.Tournaments.PrizeSplits`               | Sieger 100 · Podium 60/30/10 · Top 5 40/25/15/12/8                                                        | Preisverteilung in Prozent                                                                   |
| `Config.Tournaments.Auto`                      | an, alle `120` min, ab `4` Spielern, `5` min Anmeldung, `20` min Dauer, Topf `10000`, Verteilung `podium` | automatische Turniere ohne Startgeld – Typen reihum: schwerster Fisch, Gesamtgewicht, Punkte |

#### Boss-Fische und Schätze

| Option                                           | Standard  | Bedeutung                                                                         |
| ------------------------------------------------ | --------- | --------------------------------------------------------------------------------- |
| `Config.Boss.Announce`                           | `'all'`   | Meldung beim Fang: `all` (ganzer Server), `anglers`, `none`                       |
| `Config.Boss.SightingInterval`                   | `45`–`90` | Minuten zwischen zwei Sichtungen                                                  |
| `Config.Boss.SightingMinutes`                    | `20`      | Dauer einer Sichtung                                                              |
| `Config.Bosses` (`config/fish.lua`)              | 12 Stück  | Art, Hotspot, Mindestlevel (20–92), Bedingungen, Abklingzeit (20–72 h), Belohnung |
| `Config.Treasure.Radius`                         | `120.0`   | Radius des Suchgebiets (m)                                                        |
| `Config.Treasure.DigDistance`                    | `2.5`     | so nah (m) muss man der Truhe sein, um zu graben oder zu bergen                   |
| `Config.Treasure.Rolls`                          | `3`       | so oft wird die Beuteliste je Truhe gewürfelt (mindestens 1 Treffer)              |
| `Config.Treasure.Spots` (`config/locations.lua`) | 16        | 11 Orte zum Graben, 5 zum Tauchen                                                 |
| `Config.Treasure.Loot`                           | 7 Zeilen  | Beuteliste (Geld, Perlen, Münzen, Kompass, Kunstköder, Flaschenpost)              |

#### Boote und Sonar

| Option                                       | Standard          | Bedeutung                                                                                                  |
| -------------------------------------------- | ----------------- | ---------------------------------------------------------------------------------------------------------- |
| `Config.Boats.List` (`config/locations.lua`) | 8 Boote           | Dinghy bis Toro – Level 1 bis 52, Miete 350 bis 3.800                                                      |
| `Config.Boats.Rentals`                       | 4 Stationen       | Marina, Alamo Sea, Paleto Bay, Chumash                                                                     |
| `Config.Boats.Deposit`                       | `2500`            | Kaution – gibt es bei Rückgabe am Steg zurück                                                              |
| `Config.Boats.ReturnRadius`                  | `40.0`            | so nah (m) am Verleih muss das Boot stehen                                                                 |
| `Config.Boats.FishFromOwn`                   | `true`            | Angeln auch von eigenen Booten                                                                             |
| `Config.Boats.MaxRentMinutes`                | `120`             | danach wird ein vergessenes Mietboot entfernt (Kaution verfällt)                                           |
| `Config.Boats.FullTank`                      | `true`            | Mietboote werden mit vollem Tank übergeben (Tank-Scripts: `bridge/client/fuel.lua`)                        |
| `Config.Boats.Anchor.Enabled`                | `true`            | Anker ein/aus                                                                                              |
| `Config.Boats.Anchor.Key` / `Command`        | `'H'` / `'anker'` | Standardtaste (Spieler ändern sie in den GTA-Einstellungen unter „FiveM“; `''` = nur Befehl) / Chat-Befehl |
| `Config.Boats.Anchor.OnlyRental`             | `false`           | `true` = nur das eigene Mietboot darf ankern                                                               |
| `Config.Boats.Anchor.MaxSpeed`               | `3.0`             | m/s – schneller kann der Anker nicht gesetzt werden                                                        |
| `Config.Sonar.ScanInterval`                  | `2000`            | ms zwischen zwei Abfragen, solange das Sonar läuft                                                         |

#### Stationen und Blips

`config/locations.lua` enthält 4 Angelshops, 4 Fischhändler, 4 Restaurants, 5 Schwarzmarkt-Orte und 4 Bootsverleihe – jede Zeile mit Koordinate (`vec4`), Ped-Modell und optionalem Blip. Standard-Blips je Stationsart stehen in `Config.Blips` (`Config.Blips.Enabled = false` schaltet alle ab). Der Schwarzmarkt-Händler hat nie einen Blip.

#### Server-only (`config/server.lua`)

| Option                          | Standard                 | Bedeutung                                                                     |
| ------------------------------- | ------------------------ | ----------------------------------------------------------------------------- |
| `ServerConfig.Webhooks`         | alle `''`                | `catches`, `bosses`, `tournaments`, `illegal`, `security`                     |
| `ServerConfig.WebhookName`      | `'Pepper Fishing'`       | Absendername der Webhook-Nachrichten                                          |
| `ServerConfig.WebhookMinRarity` | `'epic'`                 | ab dieser Seltenheit geht ein Fang an `catches` (`rare`, `epic`, `legendary`) |
| `ServerConfig.AdminAce`         | `'pepper_fishing.admin'` | ACE-Recht für Admins                                                          |
| `ServerConfig.VersionCheck`     | `true`                   | Update-Hinweis in der Konsole (lädt keinen Code nach)                         |

### Spielablauf

#### Angeln in sieben Schritten

{% stepper %}
{% step %}
**Rute auspacken**

Das Item **Angelrute** benutzen – die Rute liegt in der Hand, das Angel-HUD zeigt Köder, Ausrüstung und Gewässer. Nochmal benutzen oder `X` packt sie wieder ein.
{% endstep %}

{% step %}
**Auswerfen**

Linke Maustaste halten, die Kraftanzeige füllt sich, loslassen. Der Aufschlagpunkt muss Wasser sein und in der Wurfweite der Rute liegen (18–38 m je nach Rute).
{% endstep %}

{% step %}
**Warten**

Der Schwimmer liegt im Wasser. Die Beißzeit hängt von Köder, Gewässer, Tageszeit, Wetter, Gezeiten, Schwarm und Perks ab. Einholen geht jederzeit – der Köder bleibt.
{% endstep %}

{% step %}
**Anschlag**

Beim Biss kommen Ton und „!“. Jetzt `E` oder Linksklick – wer zu spät ist, verliert den Köder.
{% endstep %}

{% step %}
**Drill**

Linke Maustaste oder Leertaste halten = kurbeln (Spannung steigt, der Fisch kommt näher), loslassen = Schnur geben. Die Spannung muss im grünen Bereich bleiben: zu lange im roten Bereich = **Schnurbruch**, zu lange schlaff = **ausgeschlitzt**. Der Fisch flüchtet, taucht ab und springt – beim Sprung rechtzeitig `A` oder `D` drücken.
{% endstep %}

{% step %}
**Fangkarte**

Die Kamera fährt heran, die Fangkarte zeigt Art, Seltenheit, Gewicht, Länge, Qualität und XP – dazu „Neu im Lexikon“, „Persönlicher Rekord“ oder „Server-Rekord“. `E` behalten, `R` zurücksetzen (+25 % XP und Naturschutz-Ruf).
{% endstep %}

{% step %}
**Verwerten**

Beim Fischhändler verkaufen, für einen Auftrag oder eine Restaurant-Lieferung nutzen – oder im Turnier werten lassen.
{% endstep %}
{% endstepper %}

Statt eines Fischs kann auch **Beifang** am Haken hängen: Stiefel, Dose, Reifen – oder eine Flaschenpost, eine Perle, eine Schatztruhe.

#### Gewässer und Bedingungen

| Gewässertyp | Wo                                  | Besonderheit                                   |
| ----------- | ----------------------------------- | ---------------------------------------------- |
| **Küste**   | alles Meer nahe am Ufer             | vom Strand, Steg oder Boot                     |
| **Hochsee** | Meer ab 25 m Wassertiefe            | nur vom Boot, ab Level 15, eigener Angelschein |
| **See**     | z. B. Alamo Sea, Land Act Reservoir | benannte Zonen                                 |
| **Fluss**   | z. B. Zancudo River, Raton Canyon   | benannte Zonen                                 |
| **Sumpf**   | Lago Zancudo                        | benannte Zone                                  |

* **Tageszeit:** Morgendämmerung 5–8, Tag 8–18, Abenddämmerung 18–21, Nacht 21–5 Uhr (Spielzeit)
* **Wetter:** klar, bewölkt, Regen, Sturm, Nebel, Schnee
* **Gezeiten** (nur Küste und Hochsee): 2 Hoch- und 2 Niedrigwasser je Spieltag
* **Saison:** Frühling, Sommer, Herbst, Winter – wechselt alle 7 Echt-Tage; manche Arten haben **Schonzeit**
* **Hotspots:** 12 feste Stellen mit Bonus – und die Heimat der Boss-Fische
* **Schwärme:** wandern über die Karte, verkürzen die Beißzeit – sichtbar nur per Sonar

Die **Beißvorhersage** auf der Startseite des Angelbuchs zeigt je Gewässertyp 1–5 Fische für jetzt und die nächsten Spielstunden, dazu die besten Köder und die aktiven Schonzeiten.

#### Das Angelbuch

Das Item **Angelbuch** öffnet das Logbuch (mit Prop und Animation).

| Seite            | Inhalt                                                                                            |
| ---------------- | ------------------------------------------------------------------------------------------------- |
| **Start**        | Profil, Level, Beißvorhersage, Gezeiten, gesuchte Fische, Aufträge, Boss-Gerüchte                 |
| **Fischlexikon** | alle Arten als Sammelkarten – unentdeckte als Silhouette; je Art Anzahl, Bestwerte, Server-Rekord |
| **Seekarte**     | Zonen, entdeckte Hotspots, Stationen, Schatzgebiet                                                |
| **Ausrüstung**   | Rute, Rolle, Schnur, Haken, Sonar mit Haltbarkeit und Vergleich                                   |
| **Köder**        | 12 Köder mit Wirkung, Auswahl des aktiven Köders                                                  |
| **Skill-Baum**   | 4 Zweige, 24 Perks, Punkte zurücksetzen gegen Geld                                                |
| **Aufträge**     | 3 tägliche und 2 wöchentliche Aufträge (wöchentliche ab Level 10)                                 |
| **Fischmarkt**   | Kurse mit Trend, gesuchte Arten                                                                   |
| **Turniere**     | Liste, Anmeldung, Erstellen (mit Recht)                                                           |
| **Ranglisten**   | Level, schwerster Fisch, Gesamtgewicht, Saison, legendäre Fänge, Naturschutz-Ruf                  |
| **Trophäen**     | 36 Erfolge, Belohnungen abholen                                                                   |
| **Hall of Fame** | die letzten 50 Boss-Fänge                                                                         |
| **Verwaltung**   | nur für Admins                                                                                    |

Unterwegs zeigt das Buch nur an. **Kaufen, Verkaufen, Reparieren und Mieten geht nur an der passenden Station** – der NPC öffnet das Buch direkt auf der richtigen Seite.

#### Stationen

| Station                   | Was es dort gibt                                                                 |
| ------------------------- | -------------------------------------------------------------------------------- |
| **Angelshop** (4)         | Rute, Angelbuch, Köder, Ausrüstung kaufen und reparieren, Angelschein            |
| **Fischhändler** (4)      | legale Fische, Beifang und Wertsachen verkaufen – „alles verkaufen“              |
| **Bootsverleih** (4)      | Boote mieten und zurückgeben                                                     |
| **Restaurant** (4)        | Lieferaufträge: bestimmte Arten mit Mindestgewicht zum Premiumpreis (ab Level 8) |
| **Schwarzmarkt** (5 Orte) | kauft illegale Fische gegen Schwarzgeld – nur nachts, ab Level 15                |

#### Ausrüstung, Köder, Skill-Baum

* **Ausrüstung** gehört zum Profil, nicht ins Inventar: 6 Ruten (Wurfweite, max. Fischgewicht, Spannungstoleranz), 5 Rollen (Einholtempo, Bremse), 5 Schnüre (Tragkraft), 4 Haken (Anschlag-Fenster, Ausschlitzen), 3 Sonare. Jedes Teil verliert Haltbarkeit – bei 0 ist es unbrauchbar, bis es im Angelshop repariert wird.
* **Köder** sind Items: 7 Naturköder (verbrauchen sich je Biss) und 5 Kunstköder (gehen nur bei Schnurbruch oder Fehlbiss verloren). Jede Art hat ihre Vorlieben.
* **Skill-Baum:** 1 Punkt je Level-Aufstieg, dazu Bonuspunkte von Boss-Fischen. Alle Perks auf Maximum kosten mehr Punkte, als es bis Level 100 gibt – man muss sich entscheiden.

| Zweig       | Perks                                                                                            |
| ----------- | ------------------------------------------------------------------------------------------------ |
| **Technik** | Spannungsbereich, Einholtempo, Anschlag-Fenster, Schnurbruch-Schutz, Sprung-Fenster, Wurfweite   |
| **Gespür**  | Beißzeit, Seltenheit, Gewicht, Sonar-Reichweite, Schwarm-Bonus, Boss-Chance                      |
| **Handel**  | Verkaufspreise, Shop-Rabatt, Auftragsbelohnung, Marktinfo, Schwarzmarkt-Bonus, Turnier-Preisgeld |
| **Natur**   | Köder sparen, Haltbarkeit, Schatz-Chance, Zurücksetzen-XP, Qualität, Müll-Recycling              |

#### Boote und Sonar

Am Bootsverleih gibt es 8 Boote vom Dinghy (Level 1) bis zum Toro (Level 52) – Miete plus Kaution, die Kaution gibt es bei Rückgabe am Steg zurück. Mietboote sind vollgetankt; ein vergessenes Boot wird nach 120 Minuten entfernt, die Kaution verfällt dann. Geangelt wird stehend auf dem Boot, auch auf eigenen Booten.

Mit `H` (oder `/anker`) setzt du den **Anker**: Das Boot bleibt liegen, solange du an Deck angelst – nochmal drücken lichtet ihn. Das geht in dem Boot, in dem du sitzt oder auf dem du stehst, aber nicht in voller Fahrt.

Das **Sonar** (Ausrüstung, ab Level 15) schaltest du im Boot mit `G` ein: Schwärme und Hotspots in Reichweite, Tiefe und Gewässertyp. Stufe 2 zeigt zusätzlich Seltenheits-Hinweise, Stufe 3 Boss-Sichtungen.

#### Fischmarkt, Aufträge, Lieferungen

* **Fischmarkt:** Jeder Verkauf drückt den Kurs der Art (bis 0,6), mit der Zeit erholt er sich (bis 1,5). Täglich gibt es 3 gesuchte Arten mit +50 %.
* **Aufträge:** 3 tägliche und 2 wöchentliche (ab Level 10) je Spieler – z. B. bestimmte Arten, Seltenheiten, Gesamtgewicht, bei Nacht oder Regen, zurücksetzen, verkaufen. Belohnung: XP und Geld.
* **Restaurant-Lieferungen:** Jedes Restaurant hat 3 Bestellungen – bestimmte Arten mit Mindestgewicht zum Premiumpreis.

#### Turniere und Angel-Saison

| Typ                  | Wertung                           |
| -------------------- | --------------------------------- |
| **Schwerster Fisch** | der schwerste Einzelfang          |
| **Gesamtgewicht**    | Summe aller Fänge                 |
| **Punkte**           | Punkte nach Seltenheit            |
| **Zielart**          | meiste Fänge einer bestimmten Art |

Dauer 10–60 Minuten, Startgeld bis 25.000, optional auf einen Gewässertyp beschränkt. Die Live-Wertung läuft als HUD mit, am Ende gibt es ein Ergebnis mit Podium und Preisgeld (Sieger, Podium oder Top 5). Standardmäßig startet der Server alle 120 Minuten ein automatisches Turnier, wenn mindestens 4 Spieler online sind. Teilnahme ab Level 5.

Die **Angel-Saison** läuft 30 Tage: Fänge und Turniere bringen Saisonpunkte, die Top 25 bekommen Belohnungen – abholbar im Angelbuch.

#### Boss-Fische

12 benannte legendäre Einzelfische, je einer pro Hotspot – vom „König von Alamo“ (ab Level 20) bis zum „Admiral“ (ab Level 92). Jeder hat Bedingungen: Tageszeit, Wetter, Köder, Mindest-Schnur.

* **Sichtung:** Alle 45–90 Minuten meldet der Server ein Gerücht mit Kartenmarkierung – für 20 Minuten ist die Chance am Hotspot stark erhöht.
* **Drill** in 3–5 Akten.
* **Fang:** serverweite Meldung, Eintrag in der Hall of Fame, Trophäe als Item, XP, Geld, 1–3 Skillpunkte und Saisonpunkte.
* Danach ist der Boss 20–72 Echt-Stunden weg.

#### Angelschein, illegales Angeln, Kontrolle

* **Angelschein** im Angelshop: „Binnen & Küste“ und „Hochsee“. Ohne Schein kann man angeln – es ist aber ein Verstoß.
* **Illegal** ist außerdem: geschützte Arten oder Schonzeit-Fische behalten und in einer der 4 Sperrzonen angeln. Die Fangkarte warnt vorher; zurücksetzen ist immer legal.
* Jeder Verstoß erhöht den **Verdacht** – und damit die Chance auf einen Alarm an Polizei oder Ranger.
* Illegale Fische nimmt der Fischhändler nicht an. Der **Schwarzmarkt-Händler** zahlt das 1,8-Fache in Schwarzgeld, steht aber nur nachts an einem täglich wechselnden Ort.
* **Kontrolle:** Polizei und Ranger kontrollieren Angler in der Nähe (Target oder `/fishcheck`) – sie sehen Schein, Verstöße und illegale Fische und können beschlagnahmen, ein Bußgeld verhängen oder den Schein entziehen.

#### Schätze

Eine **Flaschenpost** enthält eine **Schatzkarte**: ein Suchgebiet auf der Karte, vor Ort hilft eine „heiß/kalt“-Anzeige. Am Strand wird gegraben, im Wasser getaucht. In der Truhe liegen Geld, Perlen, alte Münzen, seltener ein Kompass oder Kunstköder. Direkt geangelte **Schatztruhen** öffnet man im Inventar.

### Befehle & Exports

#### Befehle

Pepper Fishing braucht **keinen** Chat-Befehl – geangelt wird über das Item `fishing_rod`, das Angelbuch öffnet sich über das Item `fishing_book`.

| Befehl           | Standard                           | Funktion                                                                           |
| ---------------- | ---------------------------------- | ---------------------------------------------------------------------------------- |
| `Config.Command` | aus (`false`)                      | z. B. `'angelbuch'` → `/angelbuch` öffnet das Angelbuch **ohne** Item              |
| `/fishcheck`     | an (`Config.Control.Command`)      | nächsten Spieler kontrollieren – nur mit Recht `control`; `false` = nur per Target |
| `/anker`         | an (`Config.Boats.Anchor.Command`) | Anker setzen oder lichten – auf dem Boot, in dem man sitzt oder auf dem man steht  |

Admin-Aufgaben (Level/XP setzen, Schein geben, Turnier starten oder abbrechen, Boss-Sichtung auslösen, Markt zurücksetzen, Saison beenden, Zonen-Debug) laufen über die Seite **Verwaltung** im Angelbuch, nicht über Befehle.

#### Tasten

| Wo         | Taste                       | Funktion                           |
| ---------- | --------------------------- | ---------------------------------- |
| Angelmodus | Linke Maustaste (halten)    | Auswerfen                          |
| Angelmodus | `Alt`                       | Köder wechseln                     |
| Angelmodus | `X`                         | Rute einpacken / abbrechen         |
| Biss       | `E` oder Linksklick         | Anschlag                           |
| Drill      | Linke Maustaste / Leertaste | kurbeln (loslassen = Schnur geben) |
| Drill      | `A` / `D`                   | Sprung parieren                    |
| Fangkarte  | `E`                         | behalten                           |
| Fangkarte  | `R`                         | zurücksetzen                       |
| Boot       | `G`                         | Sonar an/aus                       |
| Boot       | `H`                         | Anker setzen/lichten               |

Der Anker liegt auf einer eigenen Tastenbelegung (`Config.Boats.Anchor.Key`) – Spieler ändern sie in den GTA-Einstellungen unter **Tastenbelegung → FiveM**. Alle anderen Tasten änderst du in `Config.Keys` (GTA-Control-IDs: `Cast = 24, Reel = 24, ReelAlt = 22, Hook = 38, Cancel = 73, Keep = 38, Release = 45, Sonar = 47, Bait = 19, QteLeft = 34, QteRight = 35`).

#### Rechte (ACE)

```cfg
add_ace group.admin pepper_fishing.admin allow        # alle Rechte, Verwaltung im Angelbuch
add_ace group.mod pepper_fishing.tournament allow     # Turniere erstellen und abbrechen
add_ace group.mod pepper_fishing.control allow        # Angler kontrollieren
```

Alternativ über Gruppen, Jobs mit Mindest-Dienstgrad, Items oder `everyone = true` – siehe **Konfiguration**.

#### Exports (Server)

Alle Exports sind **nur lesend** – es gibt bewusst keinen Export, mit dem andere Ressourcen XP, Geld oder Fänge ändern.

| Export                                   | Rückgabe                                                                   |
| ---------------------------------------- | -------------------------------------------------------------------------- |
| `exports.pepper_fishing:getProfile(src)` | öffentliches Anglerprofil (pid, Name, Level, Rang, Statistiken) oder `nil` |
| `exports.pepper_fishing:getLevel(src)`   | Angel-Level (0 = Profil nicht geladen)                                     |
| `exports.pepper_fishing:isFishing(src)`  | `true`, wenn der Spieler gerade angelt (Warten, Biss, Drill)               |

Beispiel – ein anderes Script während des Drills sperren:

```lua
if exports.pepper_fishing:isFishing(source) then
    return -- Spieler hat gerade einen Fisch am Haken
end
```

#### Webhooks

In `config/server.lua` (`''` = aus):

```lua
ServerConfig.Webhooks = {
    catches = '',     -- besondere Fänge: epische Fische, Server-Rekorde
    bosses = '',      -- Boss-Fische: Sichtungen und Fänge (Hall of Fame)
    tournaments = '', -- Turnier-Ergebnisse, Saisonende
    illegal = '',     -- Alarme, Kontrollen, Bußgelder, Schwarzmarkt-Verkäufe
    security = '',    -- Verdachtsfälle der Plausibilitätsprüfung
}
ServerConfig.WebhookName = 'Pepper Fishing'
ServerConfig.WebhookMinRarity = 'epic' -- 'rare' | 'epic' | 'legendary'
```

Webhook-URLs nie öffentlich teilen.

#### Dispatch

`Config.Illegal.Dispatch.Mode` in `config/config.lua` (optional – fehlt der Eintrag, gilt `'auto'`):

| Wert                                                                                     | Verhalten                                                                                                                                   |
| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `'auto'` (Standard)                                                                      | erste laufende Integration in dieser Reihenfolge: ps-dispatch, cd\_dispatch, qs-dispatch, rcore\_dispatch, core\_dispatch – sonst eingebaut |
| `'ps-dispatch'`, `'cd_dispatch'`, `'qs-dispatch'`, `'rcore_dispatch'`, `'core_dispatch'` | genau diese Integration (läuft sie nicht → eingebaut)                                                                                       |
| `'builtin'`                                                                              | eingebauter Alarm: Meldung + Blip für alle Spieler mit Job aus `Config.Control.Jobs`                                                        |
| `false`                                                                                  | kein Alarm                                                                                                                                  |

Der Blip bleibt `Config.Illegal.Dispatch.BlipTime` Sekunden sichtbar (Standard 90). Eigene Systeme bindest du in `bridge/server/dispatch.lua` an (offen).

#### Bridges (offen)

| Datei                                              | Aufgabe                                                                                                                                                       |
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `bridge/detect.lua`                                | Framework-Erkennung                                                                                                                                           |
| `bridge/server/esx.lua`, `qbcore.lua`, `qbox.lua`  | Geld, Job, Identifier, Charakterwechsel                                                                                                                       |
| `bridge/server/standalone.lua`                     | Notbetrieb ohne Framework (Identität = Lizenz, Geld = Item `money`) – nur wenn kein Framework läuft                                                           |
| `bridge/server/inventory.lua`                      | Items benutzbar machen, prüfen, geben, nehmen (ox\_inventory)                                                                                                 |
| `bridge/server/dispatch.lua`                       | Alarm an Polizei/Ranger                                                                                                                                       |
| `bridge/server/keys.lua`, `bridge/client/keys.lua` | Fahrzeugschlüssel für das Mietboot: qbx\_vehiclekeys, wasabi\_carlock, MrNewbVehicleKeys, qb-vehiclekeys, Renewed-Vehiclekeys – eigenes System dort eintragen |
| `bridge/client/fuel.lua`                           | Mietboot volltanken: GTA-Tankstand, ox\_fuel, LegacyFuel, cdn-fuel, ps-fuel, lj-fuel, lc\_fuel, qb-fuel                                                       |
| `bridge/client/frameworks.lua`                     | Job und Benachrichtigungen im Client                                                                                                                          |

### FAQ

#### Fehlerbehebung

| Problem                                                            | Lösung                                                                                                                                                                                                           |
| ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Rute oder Angelbuch lassen sich nicht benutzen                     | Items eingetragen? In `ox_inventory/data/items.lua` muss `server = { export = 'pepper_fishing.<item>' }` drinstehen. Ordner nicht umbenennen. Framework und ox\_inventory **vor** `pepper_fishing` starten.      |
| Items haben kein Bild                                              | Alle Dateien aus `install/images/` nach `ox_inventory/web/images/` kopieren.                                                                                                                                     |
| „Pepper Fishing startet noch“                                      | Datenbank nicht erreichbar – `oxmysql` vor `pepper_fishing` starten, Konsole prüfen. Ohne CREATE-Recht `install/pepper_fishing.sql` importieren.                                                                 |
| „Dafür fehlt dir die Berechtigung“                                 | Recht in `Config.Permissions` vergeben oder `add_ace group.admin pepper_fishing.admin allow`.                                                                                                                    |
| NPC steht in einer Wand, Boot erscheint an Land                    | Die Koordinaten in `config/locations.lua` sind Näherungen – die Zeile der Station bzw. den `spawns`-Punkt anpassen.                                                                                              |
| Keine Interaktion am NPC                                           | `Config.Interaction` prüfen. Ohne ox\_target/qb-target `'textui'` setzen.                                                                                                                                        |
| „So weit kommst du mit dieser Rute nicht“                          | Der Aufschlagpunkt liegt außerhalb der Wurfweite – näher ans Wasser oder eine bessere Rute kaufen.                                                                                                               |
| „Wähle zuerst einen Köder“                                         | Im Angelbuch unter **Köder** einen Köder wählen – er muss im Inventar sein.                                                                                                                                      |
| „… ist verschlissen“                                               | Haltbarkeit 0 – das Teil im Angelshop reparieren.                                                                                                                                                                |
| „Das geht nur direkt an der Station“                               | Kaufen, Verkaufen, Reparieren und Mieten geht nur beim NPC.                                                                                                                                                      |
| Fischhändler lehnt Fische ab                                       | Illegal gefangene Fische nimmt nur der Schwarzmarkt-Händler.                                                                                                                                                     |
| Schwarzmarkt-Händler fehlt                                         | Erst ab Level 15, nur nachts (21–5 Uhr Spielzeit), der Ort wechselt täglich. Jobs aus `Config.Illegal.HiddenForJobs` sehen ihn nie.                                                                              |
| Schwarzmarkt zahlt Bargeld (QBCore/Qbox)                           | `Config.DirtyMoney` nutzt dort `cash` – oder ein eigenes Konto eintragen.                                                                                                                                        |
| Hochsee-Fische beißen nicht                                        | Erst ab Level 15, nur vom Boot und ab 25 m Wassertiefe (`Config.Zones.DeepDepth`).                                                                                                                               |
| Sonar geht nicht an                                                | Sonar gekauft und ausgerüstet? Es läuft nur im oder auf einem Boot (`G`).                                                                                                                                        |
| Polizei bekommt keinen Alarm                                       | Der Alarm kommt nur mit einer Wahrscheinlichkeit (3 % + Verdacht). `Config.Control.Jobs` und Dispatch prüfen.                                                                                                    |
| „Kein Platz im Inventar“ beim Fang                                 | Platz schaffen – der Fang bleibt bis zu 60 Sekunden liegen, danach wird er zurückgesetzt.                                                                                                                        |
| Mietboot lässt sich nicht starten (Schlüssel fehlt)                | Dein Schlüssel-Script in `bridge/server/keys.lua` bzw. `bridge/client/keys.lua` eintragen – fertig angebunden sind qbx\_vehiclekeys, wasabi\_carlock, MrNewbVehicleKeys, qb-vehiclekeys und Renewed-Vehiclekeys. |
| Mietboot hat keinen Sprit                                          | Dein Tank-Script in `bridge/client/fuel.lua` eintragen (`Config.Boats.FullTank`).                                                                                                                                |
| „Hier hält der Anker nicht“ / „Das Boot ist zu schnell zum Ankern“ | Erst langsamer werden (`Config.Boats.Anchor.MaxSpeed`, Standard 3 m/s); an manchen Stellen lässt GTA keinen Anker zu.                                                                                            |
| Rote Meldung in der Konsole: „standalone“                          | Beim Start lief kein Framework – `es_extended`, `qb-core` oder `qbx_core` in der `server.cfg` **vor** `pepper_fishing` starten.                                                                                  |

#### Fragen

<details>

<summary>Ist Angeln ein Job?</summary>

Nein. Pepper Fishing ist eine Aktivität für alle Spieler – ohne Job, ohne Whitelist. Polizei und Ranger bekommen über die Kontrolle eine eigene Rolle.

</details>

<details>

<summary>Brauche ich Addon-Modelle oder eine Map?</summary>

Nein. Ruten, Schwimmer, Boote, NPCs und Schatztruhen sind GTA-Standardmodelle. Geangelt wird an jedem Gewässer der Karte.

</details>

<details>

<summary>Läuft es ohne ox_inventory?</summary>

Nein, ox\_inventory ist Pflicht. Jeder Fisch trägt Gewicht, Länge, Qualität, Gewässertyp und Fänger in den Item-Metadaten – das können andere Inventare so nicht.

</details>

<details>

<summary>Muss ich ox_target benutzen?</summary>

Nein. `Config.Interaction = 'auto'` nimmt ox\_target, sonst qb-target, sonst TextUI (Taste E).

</details>

<details>

<summary>Wie lange dauert es bis Level 100?</summary>

Mit den Standardwerten rund 150 Spielstunden – das ist das Ergebnis einer Simulation in den Tests der Ressource. Mit `Config.Level.XpMultiplier` stellst du es ein: `2.0` halbiert die Dauer, `0.5` verdoppelt sie.

</details>

<details>

<summary>Kann ich die Preise an meine Server-Wirtschaft anpassen?</summary>

Ja. `Config.Economy.PriceMultiplier` skaliert alle Fischpreise auf einmal. Einzelpreise stehen je Art in `config/fish.lua`, Ausrüstung und Köder in `config/gear.lua`, Bootsmieten in `config/locations.lua`.

</details>

<details>

<summary>Kann ich eigene Fischarten hinzufügen?</summary>

Die Arten stehen als Daten in `config/fish.lua` (offen). Eine neue Art braucht dort einen Eintrag, Namen in `locales/*/fish.json`, ein Item in `ox_inventory` und ein Bild.

</details>

<details>

<summary>Kann ich den Angelschein abschalten?</summary>

Ja: `Config.License.Required = false`. Dann ist Angeln ohne Schein kein Verstoß mehr.

</details>

<details>

<summary>Kann die Polizei den Schwarzmarkt sehen?</summary>

Nein. Jobs aus `Config.Illegal.HiddenForJobs` sehen den Händler nicht. Polizei und Ranger erfahren von Fischwilderei über den Alarm und die Kontrolle.

</details>

<details>

<summary>Was passiert bei einem Server-Neustart?</summary>

Laufende Würfe und Drills enden. Profile, Lexikon, Rekorde, Marktkurse, Turnier-Ergebnisse, Saison und die Abklingzeiten der Boss-Fische liegen in der Datenbank.

</details>

<details>

<summary>Wie stelle ich auf Englisch um?</summary>

`Config.Locale = 'en'` in `config/config.lua`. Für die Items `install/ox_items_en.lua` verwenden.

</details>

### Changelog

#### 1.0.0 – 2026-10-04

**Erste Version**

* Angeln an jedem Gewässer mit Drill-Minispiel: Schnurspannung, Fluchten, Abtauchen, Sprünge, Schnurbruch, Ausschlitzen
* 83 Fischarten in Küste, Hochsee, See, Fluss und Sumpf, 12 legendäre Boss-Fische mit Sichtungen
* Level 1–100, 10 Ränge, Skill-Baum mit 4 Zweigen und 24 Perks
* Ausrüstung mit Haltbarkeit (Ruten, Rollen, Schnüre, Haken, Sonare) und 12 Köder
* Tageszeit, Wetter, Gezeiten, Saison und Beißvorhersage
* Fang-Kamera, Fangkarte, Fischlexikon, Server-Rekorde, Ranglisten, Hall of Fame, 36 Erfolge
* Dynamischer Fischmarkt, Tages- und Wochenaufträge, Restaurant-Lieferungen
* Bootsverleih mit 8 Booten an 4 Stationen, Angeln vom Boot (auch vom eigenen), Anker per Taste, Sonar mit Schwärmen und Hotspots
* Turniere mit Live-Wertung, Angel-Saison mit Belohnungen
* Angelschein, Schonzeiten, geschützte Arten, Sperrzonen, Schwarzmarkt, Kontrolle mit Bußgeldkatalog
* Beifang und Schätze (Flaschenpost, Schatzkarte, Truhe)
* Angelbuch (Item) und NPC-Stationen, Interaktion über ox\_target, qb-target oder TextUI
* 124 fertige ox\_inventory-Items mit Bild, Item-Dateien auf Deutsch und Englisch
* Verwaltungsseite im Angelbuch, 5 Discord-Webhooks, 3 Server-Exports (`getProfile`, `getLevel`, `isFishing`)
* Alarm an Polizei/Ranger über ps-dispatch, cd\_dispatch, qs-dispatch, rcore\_dispatch, core\_dispatch oder eingebaut
* ESX Legacy, QBCore und Qbox · Deutsch und Englisch, alle Texte in `locales/` anpassbar
