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

# Pepper Fishing

Fishing with a fight minigame, 83 fish species, 12 boss fish, levels 1–100 with a skill tree, boats and sonar, fish market, tournaments, fishing licenses and inspections for ESX, QBCore and Qbox.

On most servers fishing meant: press a key, wait for a bar, fish in your inventory. With **Pepper Fishing** your players cast at any water, set the hook on the bite and fight the fish with line tension – too much pull and the line snaps, too little and the fish gets off. Then the catch card shows what was on the hook.

Players fish with the **fishing rod** (item `fishing_rod`); everything else lives in the **fishing log** (item `fishing_book`): fish lexicon, gear, skill tree, orders, fish market, tournaments, leaderboards and map.

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

{% hint style="info" %}
🧪 **Tested on our dev server:** Of course we test all scripts continuously on our own dev server “Pepper Scripts”.
{% endhint %}

{% hint style="warning" %}
**Check the coordinates:** All positions in `config/zones.lua` and `config/locations.lua` (waters, hotspots, stations, boat docks, treasure spots) are approximations. Walk them once after installing and adjust single lines where needed.
{% endhint %}

### Features

* **Fight minigame** – keep the line tension in the green zone, counter runs, dives and jumps; line breaks and thrown hooks included
* **83 fish species** across 5 water types (coast, open sea, lake, river, swamp) – 28 common, 25 uncommon, 19 rare, 11 epic
* **12 legendary boss fish** with sightings, fights in 3–5 acts, server-wide announcement, hall of fame and trophy
* **Levels 1–100** with 10 ranks – duration adjustable in the config, about 150 hours of play by default (simulation)
* **Skill tree** with 4 branches (Technique, Instinct, Trade, Nature) and 24 perks
* **Catch camera and catch card** – rarity, weight, length, quality, record stamp; keep or release
* **Time of day, weather, tides and season** decide what bites – with a bite forecast in the fishing log
* **Gear with durability** – 6 rods, 5 reels, 5 lines, 4 hooks, 3 sonars, plus 12 baits
* **Boats & sonar** – rental at 4 stations with 8 boats, fishing from your own boat, anchor on a key, sonar shows shoals and hotspots
* **Fish lexicon** as a collection album with personal bests, server records and leaderboards, **36 achievements**
* **Fish market** with moving prices, 3 wanted species per day, daily and weekly orders, restaurant deliveries
* **Tournaments** with live standings and prize money, **fishing season** with rewards
* **Fishing license, closed seasons, protected species, restricted zones, black market** – and **inspections** by police or rangers
* **Bycatch and treasure** – message in a bottle with treasure map, chests, pearls
* **124 ready-made ox\_inventory images**, admin page in the fishing log, Discord webhooks, server exports
* German & English, open config, locales, bridges and install files

### At a glance

|                             |                                                                                                                                                                      |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Version**                 | 1.0.0                                                                                                                                                                |
| **Framework**               | ESX Legacy (`es_extended`), QBCore (`qb-core`) or Qbox (`qbx_core`) – detected automatically                                                                         |
| **FiveM server**            | build 7290 or newer, **OneSync** required                                                                                                                            |
| **Dependencies (required)** | [oxmysql](https://github.com/overextended/oxmysql), [ox\_lib](https://github.com/overextended/ox_lib), [ox\_inventory](https://github.com/overextended/ox_inventory) |
| **Interaction**             | ox\_target, qb-target or TextUI (`Config.Interaction`)                                                                                                               |
| **Optional**                | Dispatch: ps-dispatch, cd\_dispatch, qs-dispatch, rcore\_dispatch or core\_dispatch · vehicle keys and fuel for rental boats via open bridges                        |
| **Database**                | MySQL or MariaDB – tables are created automatically                                                                                                                  |
| **Languages**               | German, English                                                                                                                                                      |
| **Delivery**                | Cfx.re Asset Escrow (`config/`, `locales/`, `bridge/`, `install/` open)                                                                                              |

### Pages

* **Installation** – step by step, with items and images for ox\_inventory
* **Configuration** – levels, money, license, inspections, tournaments, boats
* **Gameplay** – fishing, fishing log, stations, boats, tournaments, bosses, treasure
* **Commands & Exports** – commands, keys, permissions, exports, webhooks, dispatch, bridges
* **FAQ** – questions and troubleshooting
* **Changelog**

### Installation

Work through the steps in order – every step ends with a **checkpoint**.

{% hint style="warning" %}
**Always open files with a text editor**, for example [Visual Studio Code](https://code.visualstudio.com/) or [Notepad++](https://notepad-plus-plus.org/) – never with Word or WordPad.
{% endhint %}

#### Step 1 – Check the requirements

| What                                                                                                    | Why                                                              | Required?   |
| ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ----------- |
| FiveM server **build 7290 or newer**                                                                    | older servers will not start the script                          | yes         |
| **OneSync** enabled                                                                                     | cast range, positions and boats are checked on the server        | yes         |
| **MySQL/MariaDB** + **oxmysql**                                                                         | profiles, lexicon, records, market, tournaments, season          | yes         |
| **ox\_lib**                                                                                             | server calls, zones and notifications                            | yes         |
| **ox\_inventory**                                                                                       | fish carry weight, length and quality in the item metadata       | yes         |
| **ESX Legacy**, **QBCore** or **Qbox**                                                                  | characters, money, jobs                                          | exactly one |
| **ox\_target** or **qb-target**                                                                         | talking to NPCs – without a target resource TextUI is used       | no          |
| Dispatch: ps-dispatch, cd\_dispatch, qs-dispatch, rcore\_dispatch, core\_dispatch                       | alert to police/rangers – without one the built-in alert is used | no          |
| Vehicle keys: qb-vehiclekeys, Renewed-Vehiclekeys, qbx\_vehiclekeys, wasabi\_carlock, MrNewbVehicleKeys | keys for the rental boat                                         | no          |
| Fuel: ox\_fuel, LegacyFuel, cdn-fuel, ps-fuel, lj-fuel, lc\_fuel, qb-fuel                               | rental boats are handed over with a full tank                    | no          |

**OneSync:** in txAdmin set **Settings → FXServer** to **On** – without txAdmin put `set onesync on` at the very top of your `server.cfg`.

{% hint style="success" %}
**Checkpoint:** On server start the console shows `Started resource <name>` for `oxmysql`, `ox_lib`, your framework and `ox_inventory`.
{% endhint %}

#### Step 2 – Download and extract

1. Open [Cfx.re Portal → Granted Assets](https://portal.cfx.re/assets/granted-assets) and download **pepper\_fishing**.
2. Copy the `pepper_fishing` folder to `resources/[pepper]/`.

```
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" %}
**Never rename the `pepper_fishing` folder.** The ox\_inventory exports of the items use the resource name.
{% endhint %}

{% hint style="warning" %}
**Asset Escrow:** The script only starts on a server whose license key (`sv_licenseKey`) belongs to the same Cfx.re account you bought it with. More: **Asset Escrow**.
{% endhint %}

#### Step 3 – Add items and images

Pepper Fishing ships 124 items – each with a ready-made image:

| Item                                                                                       | Purpose                                                                        |
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
| `fishing_rod`                                                                              | fishing rod – use = fishing mode on/off                                        |
| `fishing_book`                                                                             | fishing log                                                                    |
| `fishing_license`                                                                          | optional document for the license (only with `Config.License.GiveItem = true`) |
| `bait_*`, `lure_*`                                                                         | 12 baits                                                                       |
| `fish_<species>`                                                                           | 83 fish species                                                                |
| `fish_legend_<id>`                                                                         | 12 boss trophies                                                               |
| `junk_*`                                                                                   | 8 bycatch items                                                                |
| `message_bottle`, `treasure_map`, `treasure_chest`, `pearl`, `old_coin`, `antique_compass` | treasure and valuables                                                         |

1. Open `install/ox_items_en.lua` (English names) or `install/ox_items.lua` (German names).
2. Copy **only the entries** between `return {` and the last `}`.
3. Paste them into `ox_inventory/data/items.lua` **before the very last closing brace `}`**.
4. Copy all files from `install/images/` to `ox_inventory/web/images/`.

Rod, fishing log, message in a bottle, treasure map and treasure chest contain the line `server = { export = 'pepper_fishing.<item>' }` – it makes the item usable and has to stay.

{% hint style="success" %}
**Checkpoint:** After a restart you can give yourself the rod (e.g. `/giveitem <id> fishing_rod 1`) and it shows up in your inventory with name and image.
{% endhint %}

#### Step 4 – Database

Nothing to do: the resource creates all tables (`pepper_fishing_*`) on first start. If your database user has **no CREATE permission**, import `install/pepper_fishing.sql` first.

#### Step 5 – Check the config

Open `config/config.lua` and check at least:

* `Config.Locale = 'en'` (or `'de'`)
* `Config.Framework = 'auto'` – detects Qbox, ESX and QBCore
* `Config.Interaction = 'auto'` – picks ox\_target, otherwise qb-target, otherwise TextUI
* `Config.Economy` and `Config.DirtyMoney` – accounts for sales and the black market
* `Config.License` – license requirement, prices and duration
* `Config.Control.Jobs` – which jobs may inspect anglers (default: `police`, `sheriff`, `ranger`)
* `Config.Boats.Anchor` – key (`H`) and command (`/anker`) for the anchor

Webhooks are in `config/server.lua`. Every key with its default: **Configuration**.

#### Step 6 – server.cfg

Add Pepper Fishing **after** all dependencies:

```cfg
ensure oxmysql
ensure ox_lib
ensure es_extended      # or qb-core / qbx_core
ensure ox_inventory
# optional: ox_target or qb-target, your dispatch system
ensure pepper_fishing
```

Grant the admin permission (recommended):

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

{% hint style="warning" %}
**Mind the order:** If no framework is running when `pepper_fishing` starts, the console reports it in red and the script falls back to an emergency mode without a framework (identity = license, money = `money` item) – player data then does not match your characters. Your framework therefore has to come **before** `pepper_fishing`.
{% endhint %}

#### Step 7 – First start

1. Start the server. The console shows `Pepper Fishing 1.0.0 started (framework: esx, species: 83, server records: 0, season: …)`.
2. In-game, go to a tackle shop (blip on the map) and buy a rod, fishing log, bait and a license.
3. Walk to the water, use the rod, cast.
4. **Check the coordinates:** visit the tackle shops, fishmongers, boat rentals, restaurants and black market locations once. The positions in `config/locations.lua` and `config/zones.lua` are approximations – the zone debug on the **Admin** page of the fishing log shows zones, hotspots and shoals in-game.

{% hint style="success" %}
**Checkpoint:** The console shows the right framework and 83 species, the fishing log opens, and your first fish lands in the inventory with weight and length.
{% endhint %}

{% hint style="info" %}
Problems? See the **FAQ**.
{% endhint %}

### Configuration

| File                     | Contents                                                                          |
| ------------------------ | --------------------------------------------------------------------------------- |
| `config/config.lua`      | all general settings for client and server                                        |
| `config/fish.lua`        | 83 fish species, 12 boss fish, bycatch, catch fine-tuning                         |
| `config/gear.lua`        | rods, reels, lines, hooks, sonars, baits                                          |
| `config/skills.lua`      | skill tree (4 branches, 24 perks)                                                 |
| `config/zones.lua`       | waters, hotspots, restricted zones, shoal areas                                   |
| `config/locations.lua`   | tackle shops, fishmongers, restaurants, black market, boat rental, treasure spots |
| `config/progression.lua` | ranks, unlocks, orders, deliveries, achievements, season rewards                  |
| `config/server.lua`      | webhooks, admin ACE – **never** sent to clients                                   |

Times marked "ms" are milliseconds, money is always an integer, weights are in grams.

{% hint style="warning" %}
All coordinates in `config/zones.lua` and `config/locations.lua` are **approximations**. Check them on your server.
{% endhint %}

#### Basics

| Option               | Default                          | Meaning                                                                                  |
| -------------------- | -------------------------------- | ---------------------------------------------------------------------------------------- |
| `Config.Locale`      | `'de'`                           | language (`de` / `en`) – folder in `locales/`                                            |
| `Config.Framework`   | `'auto'`                         | `auto`, `esx`, `qbcore`, `qbox` (`auto` checks qbx\_core → es\_extended → qb-core)       |
| `Config.Interaction` | `'auto'`                         | `auto` (ox\_target → qb-target → TextUI), `ox_target`, `qb-target`, `textui`             |
| `Config.Command`     | `false`                          | optional chat command (e.g. `'fishinglog'`) – opens the fishing log **without** the item |
| `Config.Debug`       | `false`                          | extra console output for troubleshooting                                                 |
| `Config.Currency`    | `'$'`                            | currency symbol in the fishing log                                                       |
| `Config.Items`       | `fishing_rod`, `fishing_book`, … | item names (must exist in ox\_inventory)                                                 |
| `Config.Keys`        | see **Commands & Exports**       | GTA control IDs                                                                          |
| `Config.Hud.Scale`   | `1.0`                            | size of the fishing HUD (0.8–1.3)                                                        |

#### Permissions

Admin = ACE `pepper_fishing.admin` **or** a group from `Config.AdminGroups` (`admin`, `superadmin`, `god`). Admins have every permission automatically. All permissions are re-checked on **every** server call.

| Permission   | What for                                                          | Default                                                                                      |
| ------------ | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| `tournament` | create and cancel tournaments                                     | group `admin`, ACE `pepper_fishing.tournament`                                               |
| `control`    | inspect anglers (check license, confiscate, fine, revoke license) | jobs `police`, `sheriff`, `ranger` from grade 0, group `admin`, ACE `pepper_fishing.control` |

Any fulfilled condition is enough:

```lua
Config.Permissions = {
    tournament = {
        ace = 'pepper_fishing.tournament',  -- add_ace group.mod pepper_fishing.tournament allow
        groups = { 'admin' },               -- framework groups
        jobs = {},                          -- e.g. { fisher = 2 } = job from grade 2
        items = {},                         -- item in the inventory
        everyone = false,                   -- true = every player
    },
}
```

#### Cast, bite, fight

| Option                                            | Default                                 | Meaning                                                                                                             |
| ------------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `Config.Cast.MinPower`                            | `0.25`                                  | minimum power of a cast (0–1) – minimum distance = cast range of the rod × 0.25                                     |
| `Config.Cast.ChargeTime`                          | `1400`                                  | ms until the power meter is full                                                                                    |
| `Config.Cast.Cooldown`                            | `1500`                                  | ms pause between two casts                                                                                          |
| `Config.Cast.MaxRangeSlack`                       | `8.0`                                   | m of server tolerance on top of the cast range                                                                      |
| `Config.Bite.MinDelay` / `MaxDelay`               | `6000` / `38000`                        | earliest / latest bite time in ms                                                                                   |
| `Config.Bite.Window`                              | `1600`                                  | ms strike window after the bite                                                                                     |
| `Config.Fight.Difficulty`                         | `1.0`                                   | strength of all fish: 0.8 = easier, 1.2 = harder                                                                    |
| `Config.Presentation.Camera`                      | `true`                                  | camera move on a catch (`false` = catch card only)                                                                  |
| `Config.Presentation.Duration`                    | `6000`                                  | ms of camera move – the catch card stays until the player decides (the server decides after 30 s)                   |
| `Config.Catch.JunkChance` (`config/fish.lua`)     | `0.07`                                  | chance of bycatch instead of a fish (swamp × 1.5, river × 1.2, open sea × 0.5)                                      |
| `Config.Catch.TreasureChance` (`config/fish.lua`) | `0.012`                                 | chance of treasure bycatch (message in a bottle, chest, pearl)                                                      |
| `Config.Catch.MaxItemWeight` (`config/fish.lua`)  | `10000`                                 | highest inventory weight of a fish item in grams (0 = real weight) – the real catch weight stays stored on the item |
| `Config.GearWear` (`config/gear.lua`)             | catch `1` per part, line break line `8` | how much durability a catch, a line break or a thrown hook costs                                                    |

#### Levels

XP for level `l → l+1`: `floor(Base + Factor × l ^ Exponent)`.

| Option                                      | Default                | Meaning                                       |
| ------------------------------------------- | ---------------------- | --------------------------------------------- |
| `Config.Level.Max`                          | `100`                  | highest level                                 |
| `Config.Level.XpMultiplier`                 | `1.0`                  | scales **all** XP gains (2.0 = twice as fast) |
| `Config.Level.Base` / `Factor` / `Exponent` | `120` / `4.3` / `1.62` | level curve – for advanced users              |
| `Config.Level.ReleaseBonus`                 | `0.25`                 | +25% XP for releasing                         |
| `Config.Level.FirstCatchBonus`              | `1.0`                  | +100% XP for the first catch of a species     |
| `Config.Level.RecordBonus`                  | `0.25`                 | +25% XP for a personal record                 |
| `Config.Level.PointsPerLevel`               | `1`                    | skill points per level-up                     |
| `Config.Skills.RespecCost`                  | `25000`                | cost of resetting all skill points            |

{% hint style="info" %}
With the defaults level 100 takes about 150 hours of play. That figure comes from a simulation in the resource's tests – on your server it depends on how your players fish.
{% endhint %}

Level unlocks (`config/progression.lua`): tournaments from 5, restaurant deliveries from 8, weekly orders from 10, boss fish from 20. Gear, baits, boats and species have their own `minLevel`.

#### Money and market

| Option                                                | Default                                  | Meaning                                                                          |
| ----------------------------------------------------- | ---------------------------------------- | -------------------------------------------------------------------------------- |
| `Config.Economy.Account`                              | `'cash'`                                 | account for sales, purchases, rent, orders (`cash` / `bank`)                     |
| `Config.Economy.PriceMultiplier`                      | `1.0`                                    | scales **all** fish prices                                                       |
| `Config.DirtyMoney`                                   | ESX `black_money`, QBCore/Qbox `cash`    | account for black market income per framework                                    |
| `Config.Market.Min` / `Max`                           | `0.6` / `1.5`                            | lowest / highest market factor                                                   |
| `Config.Market.DropPerKg`                             | `0.006`                                  | how much the factor drops per kilogram sold                                      |
| `Config.Market.MaxDropPerSale`                        | `0.04`                                   | at most this much per fish sold                                                  |
| `Config.Market.RecoverPerMinute`                      | `0.004`                                  | recovery towards 1.0 per minute                                                  |
| `Config.Market.WantedCount` / `WantedBonus`           | `3` / `0.5`                              | wanted species per day / bonus (+50%)                                            |
| `Config.Locations.shopItems` (`config/locations.lua`) | rod `250`, fishing log `150`             | prices of the items at the tackle shop – baits and gear are in `config/gear.lua` |
| `Config.QuestRules` (`config/progression.lua`)        | `Daily = 3`, `Weekly = 2`                | orders per player                                                                |
| `Config.Deliveries` (`config/progression.lua`)        | `PerRestaurant = 3`, premium `1.6`–`2.2` | orders per restaurant and day, premium on the base price                         |

Price = `$/kg × kg × quality × market factor`.

#### License, illegal fishing, inspections

| Option                                      | Default                           | Meaning                                                                                                              |
| ------------------------------------------- | --------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `Config.License.Required`                   | `true`                            | fishing without a license is a violation (still possible, raises suspicion)                                          |
| `Config.License.Days`                       | `0`                               | duration in real days (0 = permanent)                                                                                |
| `Config.License.Prices`                     | `basic = 2500`, `sea = 12000`     | inland waters + coast / open sea                                                                                     |
| `Config.License.GiveItem`                   | `false`                           | additionally hand out the `fishing_license` item                                                                     |
| `Config.Illegal.MinLevel`                   | `15`                              | level needed to find the black market dealer                                                                         |
| `Config.Illegal.BlackMarketFactor`          | `1.8`                             | the black market pays 1.8×                                                                                           |
| `Config.Illegal.DailyKeepLimit`             | `0`                               | daily limit of kept fish (0 = off)                                                                                   |
| `Config.Illegal.Suspicion`                  | `4` / `25` / `15` / `12` / `6`    | suspicion per violation: no license / protected / closed season / restricted zone / over limit; decay 0.5 per minute |
| `Config.Illegal.Dispatch`                   | `0.03` / `0.004` / `0.45` / `300` | base chance / + suspicion × factor / maximum / cooldown in seconds                                                   |
| `Config.Illegal.Dispatch.Mode` / `BlipTime` | not set (= `'auto'` / `90`)       | optional: dispatch system and blip time in seconds – see **Commands & Exports**                                      |
| `Config.Illegal.HiddenForJobs`              | `police`, `sheriff`, `ranger`     | these jobs never see the black market dealer                                                                         |
| `Config.Illegal.NightOnly`                  | `true`                            | dealer only shows up at night (21:00–05:00 game time)                                                                |
| `Config.Control.Jobs`                       | `police`, `sheriff`, `ranger`     | job = minimum grade                                                                                                  |
| `Config.Control.Command`                    | `'fishcheck'`                     | inspection command (`false` = target only)                                                                           |
| `Config.Control.Distance`                   | `4.0`                             | how close (m) the inspected player has to be                                                                         |
| `Config.Control.Fines`                      | 6 entries, 1,500–8,000            | fine catalog                                                                                                         |
| `Config.Control.RevokeDays`                 | `3`                               | license revocation in real days                                                                                      |
| `Config.Control.FineAccount`                | `'bank'`                          | account the fine is taken from                                                                                       |

{% hint style="info" %}
**RP idea:** create a `ranger` job and add it to `Config.Control.Jobs` – then fishery enforcement is a real role on your server.
{% endhint %}

#### Zones, season, shoals

| Option                      | Default                                     | Meaning                                                              |
| --------------------------- | ------------------------------------------- | -------------------------------------------------------------------- |
| `Config.Zones.DeepDepth`    | `25.0`                                      | from this water depth (m) the sea counts as open sea                 |
| `Config.Zones.DeepMinLevel` | `15`                                        | open-sea fish bite from this level (boat only)                       |
| `Config.Zones.List`         | 11 inland waters                            | named lakes, rivers and the swamp – all other water is sea           |
| `Config.Zones.Hotspots`     | 12                                          | fixed spots with a bonus – each one is home to a boss fish           |
| `Config.Zones.Restricted`   | 4                                           | restricted zones: fishing there is illegal but pays off              |
| `Config.Season.RotateDays`  | `7`                                         | seasons rotate every 7 real days                                     |
| `Config.League.Days`        | `30`                                        | length of a fishing season (leaderboard with rewards for the top 25) |
| `Config.Shoals`             | every `10` min, `25` min lifetime, max. `6` | roaming shoals (visible on sonar only)                               |

#### Tournaments

| Option                                         | Default                                                                                            | Meaning                                                                                         |
| ---------------------------------------------- | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| `Config.Tournaments.MinPlayers`                | `2`                                                                                                | minimum participants, otherwise cancelled (entry fee refunded)                                  |
| `Config.Tournaments.MaxEntryFee`               | `25000`                                                                                            | highest entry fee                                                                               |
| `Config.Tournaments.HouseCut`                  | `0.05`                                                                                             | 5% of the pot is withheld                                                                       |
| `Config.Tournaments.MinMinutes` / `MaxMinutes` | `10` / `60`                                                                                        | duration                                                                                        |
| `Config.Tournaments.PrizeSplits`               | winner 100 · podium 60/30/10 · top 5 40/25/15/12/8                                                 | prize split in percent                                                                          |
| `Config.Tournaments.Auto`                      | on, every `120` min, `4`+ players, `5` min sign-up, `20` min duration, pot `10000`, split `podium` | automatic tournaments without entry fee – types in rotation: biggest fish, total weight, points |

#### Boss fish and treasure

| Option                                           | Default    | Meaning                                                                         |
| ------------------------------------------------ | ---------- | ------------------------------------------------------------------------------- |
| `Config.Boss.Announce`                           | `'all'`    | announcement on a catch: `all` (whole server), `anglers`, `none`                |
| `Config.Boss.SightingInterval`                   | `45`–`90`  | minutes between two sightings                                                   |
| `Config.Boss.SightingMinutes`                    | `20`       | length of a sighting                                                            |
| `Config.Bosses` (`config/fish.lua`)              | 12 entries | species, hotspot, minimum level (20–92), conditions, cooldown (20–72 h), reward |
| `Config.Treasure.Radius`                         | `120.0`    | radius of the search area (m)                                                   |
| `Config.Treasure.DigDistance`                    | `2.5`      | how close (m) you have to be to the chest to dig it up or recover it            |
| `Config.Treasure.Rolls`                          | `3`        | how often the loot table is rolled per chest (at least 1 hit)                   |
| `Config.Treasure.Spots` (`config/locations.lua`) | 16         | 11 dig spots, 5 dive spots                                                      |
| `Config.Treasure.Loot`                           | 7 rows     | loot table (money, pearls, coins, compass, lures, message in a bottle)          |

#### Boats and sonar

| Option                                       | Default           | Meaning                                                                                                                 |
| -------------------------------------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `Config.Boats.List` (`config/locations.lua`) | 8 boats           | Dinghy to Toro – level 1 to 52, rent 350 to 3,800                                                                       |
| `Config.Boats.Rentals`                       | 4 stations        | marina, Alamo Sea, Paleto Bay, Chumash                                                                                  |
| `Config.Boats.Deposit`                       | `2500`            | deposit – refunded when the boat is returned at the dock                                                                |
| `Config.Boats.ReturnRadius`                  | `40.0`            | how close (m) to the rental the boat has to be                                                                          |
| `Config.Boats.FishFromOwn`                   | `true`            | fishing from player-owned boats too                                                                                     |
| `Config.Boats.MaxRentMinutes`                | `120`             | a forgotten rental boat is removed after this time (the deposit is lost)                                                |
| `Config.Boats.FullTank`                      | `true`            | rental boats are handed over with a full tank (fuel scripts: `bridge/client/fuel.lua`)                                  |
| `Config.Boats.Anchor.Enabled`                | `true`            | anchor on/off                                                                                                           |
| `Config.Boats.Anchor.Key` / `Command`        | `'H'` / `'anker'` | default key (players change it in the GTA settings under "FiveM"; `''` = command only) / chat command (e.g. `'anchor'`) |
| `Config.Boats.Anchor.OnlyRental`             | `false`           | `true` = only your own rental boat may anchor                                                                           |
| `Config.Boats.Anchor.MaxSpeed`               | `3.0`             | m/s – the anchor cannot be dropped at a higher speed                                                                    |
| `Config.Sonar.ScanInterval`                  | `2000`            | ms between two server queries while the sonar is running                                                                |

#### Stations and blips

`config/locations.lua` contains 4 tackle shops, 4 fishmongers, 4 restaurants, 5 black market locations and 4 boat rentals – each line with a coordinate (`vec4`), ped model and optional blip. Default blips per station type are in `Config.Blips` (`Config.Blips.Enabled = false` turns them all off). The black market dealer never has a blip.

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

| Option                          | Default                  | Meaning                                                                        |
| ------------------------------- | ------------------------ | ------------------------------------------------------------------------------ |
| `ServerConfig.Webhooks`         | all `''`                 | `catches`, `bosses`, `tournaments`, `illegal`, `security`                      |
| `ServerConfig.WebhookName`      | `'Pepper Fishing'`       | sender name of the webhook messages                                            |
| `ServerConfig.WebhookMinRarity` | `'epic'`                 | catches of this rarity or better go to `catches` (`rare`, `epic`, `legendary`) |
| `ServerConfig.AdminAce`         | `'pepper_fishing.admin'` | ACE permission for admins                                                      |
| `ServerConfig.VersionCheck`     | `true`                   | update notice in the console (loads no code)                                   |

### Gameplay

#### Fishing in seven steps

{% stepper %}
{% step %}
**Take out the rod**

Use the **fishing rod** item – the rod is in your hand, the fishing HUD shows bait, gear and water. Use it again or press `X` to stow it.
{% endstep %}

{% step %}
**Cast**

Hold the left mouse button, the power meter fills, release. The landing point has to be water and within the cast range of your rod (18–38 m depending on the rod).
{% endstep %}

{% step %}
**Wait**

The float sits in the water. Bite time depends on bait, water, time of day, weather, tides, shoals and perks. You can reel in at any time – the bait stays.
{% endstep %}

{% step %}
**Strike**

A bite comes with a sound and a "!". Press `E` or left click now – if you are too late, the bait is gone.
{% endstep %}

{% step %}
**Fight**

Hold left mouse button or space = reel (tension rises, the fish comes closer), release = give line. Keep the tension in the green zone: too long in the red = **line break**, too long slack = **thrown hook**. The fish runs, dives and jumps – press `A` or `D` in time when it jumps.
{% endstep %}

{% step %}
**Catch card**

The camera moves in and the catch card shows species, rarity, weight, length, quality and XP – plus "new in the lexicon", "personal record" or "server record". `E` keeps it, `R` releases it (+25% XP and conservation reputation).
{% endstep %}

{% step %}
**Cash in**

Sell at the fishmonger, use the catch for an order or a restaurant delivery – or score it in a tournament.
{% endstep %}
{% endstepper %}

Instead of a fish you may hook **bycatch**: a boot, a can, a tire – or a message in a bottle, a pearl, a treasure chest.

#### Waters and conditions

| Water type   | Where                              | Notes                                  |
| ------------ | ---------------------------------- | -------------------------------------- |
| **Coast**    | all sea close to shore             | from the beach, a pier or a boat       |
| **Open sea** | sea from 25 m water depth          | boat only, level 15+, separate license |
| **Lake**     | e.g. Alamo Sea, Land Act Reservoir | named zones                            |
| **River**    | e.g. Zancudo River, Raton Canyon   | named zones                            |
| **Swamp**    | Lago Zancudo                       | named zone                             |

* **Time of day:** dawn 5–8, day 8–18, dusk 18–21, night 21–5 (game time)
* **Weather:** clear, clouds, rain, storm, fog, snow
* **Tides** (coast and open sea only): 2 high and 2 low tides per game day
* **Season:** spring, summer, autumn, winter – rotates every 7 real days; some species have a **closed season**
* **Hotspots:** 12 fixed spots with a bonus – and home of the boss fish
* **Shoals:** roam the map, shorten the bite time – visible on sonar only

The **bite forecast** on the home page of the fishing log rates every water type with 1–5 fish for now and the next game hours, plus the best baits and active closed seasons.

#### The fishing log

The **fishing log** item opens the logbook (with prop and animation).

| Page             | Contents                                                                                                        |
| ---------------- | --------------------------------------------------------------------------------------------------------------- |
| **Home**         | profile, level, bite forecast, tides, wanted fish, orders, boss rumours                                         |
| **Fish Lexicon** | every species as a collection card – undiscovered ones as a silhouette; count, bests, server record per species |
| **Sea Chart**    | zones, discovered hotspots, stations, treasure area                                                             |
| **Gear**         | rod, reel, line, hook, sonar with durability and comparison                                                     |
| **Bait**         | 12 baits with their effect, pick the active bait                                                                |
| **Skill Tree**   | 4 branches, 24 perks, reset points for money                                                                    |
| **Jobs**         | 3 daily and 2 weekly orders (weekly from level 10)                                                              |
| **Fish Market**  | prices with trend, wanted species                                                                               |
| **Tournaments**  | list, sign-up, create (with permission)                                                                         |
| **Leaderboards** | level, biggest fish, total weight, season, legendary catches, conservation reputation                           |
| **Trophies**     | 36 achievements, claim rewards                                                                                  |
| **Hall of Fame** | the last 50 boss catches                                                                                        |
| **Admin**        | admins only                                                                                                     |

On the road the log is read-only. **Buying, selling, repairing and renting only works at the matching station** – the NPC opens the log right on the correct page.

#### Stations

| Station                        | What you get there                                                                  |
| ------------------------------ | ----------------------------------------------------------------------------------- |
| **Tackle shop** (4)            | rod, fishing log, bait, buy and repair gear, fishing license                        |
| **Fishmonger** (4)             | sell legal fish, bycatch and valuables – "sell everything"                          |
| **Boat rental** (4)            | rent and return boats                                                               |
| **Restaurant** (4)             | delivery orders: specific species with a minimum weight at a premium (from level 8) |
| **Black market** (5 locations) | buys illegal fish for dirty money – night only, level 15+                           |

#### Gear, bait, skill tree

* **Gear** belongs to the profile, not the inventory: 6 rods (cast range, max. fish weight, tension tolerance), 5 reels (retrieve speed, drag), 5 lines (strength), 4 hooks (strike window, hook-outs), 3 sonars. Every part loses durability – at 0 it is unusable until repaired at the tackle shop.
* **Baits** are items: 7 natural baits (used up per bite) and 5 lures (only lost on a line break or a missed strike). Every species has its preferences.
* **Skill tree:** 1 point per level-up plus bonus points from boss fish. Maxing every perk costs more points than you get by level 100 – you have to choose.

| Branch        | Perks                                                                                              |
| ------------- | -------------------------------------------------------------------------------------------------- |
| **Technique** | tension zone, retrieve speed, strike window, line guard, jump window, cast range                   |
| **Instinct**  | bite time, rarity, weight, sonar range, shoal bonus, boss chance                                   |
| **Trade**     | sale prices, shop discount, order rewards, market info, black market bonus, tournament prize money |
| **Nature**    | save bait, durability, treasure chance, release XP, quality, junk recycling                        |

#### Boats and sonar

The boat rental offers 8 boats from the Dinghy (level 1) to the Toro (level 52) – rent plus deposit, the deposit is refunded when you return the boat at the dock. Rental boats come with a full tank; a forgotten boat is removed after 120 minutes and the deposit is lost. You fish standing on the boat, including player-owned boats.

Press `H` (or use `/anker`) to drop the **anchor**: the boat stays put while you fish on deck – press again to weigh it. This works in the boat you sit in or stand on, but not at full speed.

Switch on the **sonar** (gear, from level 15) with `G` while on a boat: shoals and hotspots in range, depth and water type. Tier 2 adds rarity hints, tier 3 boss sightings.

#### Fish market, orders, deliveries

* **Fish market:** every sale pushes the price of that species down (to 0.6), over time it recovers (up to 1.5). Each day has 3 wanted species at +50%.
* **Orders:** 3 daily and 2 weekly (from level 10) per player – e.g. specific species, rarities, total weight, at night or in rain, release, sell. Reward: XP and money.
* **Restaurant deliveries:** every restaurant has 3 orders – specific species with a minimum weight at a premium price.

#### Tournaments and fishing season

| Type               | Scoring                     |
| ------------------ | --------------------------- |
| **Biggest fish**   | the heaviest single catch   |
| **Total weight**   | sum of all catches          |
| **Points**         | points by rarity            |
| **Target species** | most catches of one species |

Duration 10–60 minutes, entry fee up to 25,000, optionally limited to one water type. Live standings run as a HUD, at the end there is a result with podium and prize money (winner, podium or top 5). By default the server starts an automatic tournament every 120 minutes when at least 4 players are online. Participation from level 5.

The **fishing season** lasts 30 days: catches and tournaments earn season points, the top 25 get rewards – claimable in the fishing log.

#### Boss fish

12 named legendary fish, one per hotspot – from "The King of Alamo" (level 20+) to "The Admiral" (level 92+). Each has conditions: time of day, weather, bait, minimum line.

* **Sighting:** every 45–90 minutes the server announces a rumour with a map marker – for 20 minutes the chance at the hotspot is strongly increased.
* **Fight** in 3–5 acts.
* **Catch:** server-wide announcement, hall of fame entry, trophy item, XP, money, 1–3 skill points and season points.
* After a catch the boss is gone for 20–72 real hours.

#### License, illegal fishing, inspections

* **Fishing license** at the tackle shop: "Inland & Coast" and "Deep Sea". You can fish without one – but it is a violation.
* Also **illegal:** keeping protected species or closed-season fish and fishing in one of the 4 restricted zones. The catch card warns you first; releasing is always legal.
* Every violation raises **suspicion** – and with it the chance of an alert to police or rangers.
* The fishmonger refuses illegal fish. The **black market dealer** pays 1.8× in dirty money but only shows up at night at a location that changes daily.
* **Inspection:** police and rangers inspect anglers nearby (target or `/fishcheck`) – they see license, violations and illegal fish and can confiscate, fine or revoke the license.

#### Treasure

A **message in a bottle** contains a **treasure map**: a search area on the map, with a hot/cold indicator on site. Dig on the beach, dive in the water. The chest holds money, pearls, old coins, more rarely a compass or lures. **Treasure chests** hooked directly are opened from the inventory.

### Commands & Exports

#### Commands

Pepper Fishing needs **no** chat command – players fish with the `fishing_rod` item, the fishing log opens with the `fishing_book` item.

| Command          | Default                            | Function                                                                                                   |
| ---------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| `Config.Command` | off (`false`)                      | e.g. `'fishinglog'` → `/fishinglog` opens the fishing log **without** the item                             |
| `/fishcheck`     | on (`Config.Control.Command`)      | inspect the nearest player – requires the `control` permission; `false` = target only                      |
| `/anker`         | on (`Config.Boats.Anchor.Command`) | drop or weigh the anchor – on the boat you sit in or stand on (rename it to e.g. `'anchor'` in the config) |

Admin tasks (set level/XP, grant a license, start or cancel a tournament, trigger a boss sighting, reset the market, end the season, zone debug) are done on the **Admin** page of the fishing log, not via commands.

#### Keys

| Where        | Key                       | Function                   |
| ------------ | ------------------------- | -------------------------- |
| Fishing mode | Left mouse button (hold)  | cast                       |
| Fishing mode | `Alt`                     | switch bait                |
| Fishing mode | `X`                       | stow the rod / cancel      |
| Bite         | `E` or left click         | strike                     |
| Fight        | Left mouse button / space | reel (release = give line) |
| Fight        | `A` / `D`                 | counter a jump             |
| Catch card   | `E`                       | keep                       |
| Catch card   | `R`                       | release                    |
| Boat         | `G`                       | sonar on/off               |
| Boat         | `H`                       | drop/weigh anchor          |

The anchor uses its own key binding (`Config.Boats.Anchor.Key`) – players change it in the GTA settings under **Key Bindings → FiveM**. Change all other keys 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`).

#### Permissions (ACE)

```cfg
add_ace group.admin pepper_fishing.admin allow        # every permission, admin page in the fishing log
add_ace group.mod pepper_fishing.tournament allow     # create and cancel tournaments
add_ace group.mod pepper_fishing.control allow        # inspect anglers
```

Alternatively via groups, jobs with a minimum grade, items or `everyone = true` – see **Configuration**.

#### Exports (server)

All exports are **read-only** – there is deliberately no export that lets other resources change XP, money or catches.

| Export                                   | Returns                                                        |
| ---------------------------------------- | -------------------------------------------------------------- |
| `exports.pepper_fishing:getProfile(src)` | public angler profile (pid, name, level, rank, stats) or `nil` |
| `exports.pepper_fishing:getLevel(src)`   | fishing level (0 = profile not loaded)                         |
| `exports.pepper_fishing:isFishing(src)`  | `true` while the player is fishing (waiting, bite, fight)      |

Example – block another script during a fight:

```lua
if exports.pepper_fishing:isFishing(source) then
    return -- player has a fish on the hook
end
```

#### Webhooks

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

```lua
ServerConfig.Webhooks = {
    catches = '',     -- special catches: epic fish, server records
    bosses = '',      -- boss fish: sightings and catches (hall of fame)
    tournaments = '', -- tournament results, end of season
    illegal = '',     -- alerts, inspections, fines, black market sales
    security = '',    -- suspicious cases from the plausibility check
}
ServerConfig.WebhookName = 'Pepper Fishing'
ServerConfig.WebhookMinRarity = 'epic' -- 'rare' | 'epic' | 'legendary'
```

Never share webhook URLs publicly.

#### Dispatch

`Config.Illegal.Dispatch.Mode` in `config/config.lua` (optional – if missing, `'auto'` applies):

| Value                                                                                    | Behaviour                                                                                                                             |
| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `'auto'` (default)                                                                       | first running integration in this order: ps-dispatch, cd\_dispatch, qs-dispatch, rcore\_dispatch, core\_dispatch – otherwise built in |
| `'ps-dispatch'`, `'cd_dispatch'`, `'qs-dispatch'`, `'rcore_dispatch'`, `'core_dispatch'` | exactly this integration (if it is not running → built in)                                                                            |
| `'builtin'`                                                                              | built-in alert: message + blip for all players with a job from `Config.Control.Jobs`                                                  |
| `false`                                                                                  | no alert                                                                                                                              |

The blip stays for `Config.Illegal.Dispatch.BlipTime` seconds (default 90). Hook up your own system in `bridge/server/dispatch.lua` (open).

#### Bridges (open)

| File                                               | Purpose                                                                                                                                                 |
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `bridge/detect.lua`                                | framework detection                                                                                                                                     |
| `bridge/server/esx.lua`, `qbcore.lua`, `qbox.lua`  | money, job, identifier, character switch                                                                                                                |
| `bridge/server/standalone.lua`                     | emergency mode without a framework (identity = license, money = `money` item) – only when no framework is running                                       |
| `bridge/server/inventory.lua`                      | make items usable, check, give, take (ox\_inventory)                                                                                                    |
| `bridge/server/dispatch.lua`                       | alert to police/rangers                                                                                                                                 |
| `bridge/server/keys.lua`, `bridge/client/keys.lua` | vehicle keys for the rental boat: qbx\_vehiclekeys, wasabi\_carlock, MrNewbVehicleKeys, qb-vehiclekeys, Renewed-Vehiclekeys – add your own system there |
| `bridge/client/fuel.lua`                           | fill up the rental boat: GTA fuel level, ox\_fuel, LegacyFuel, cdn-fuel, ps-fuel, lj-fuel, lc\_fuel, qb-fuel                                            |
| `bridge/client/frameworks.lua`                     | job and notifications on the client                                                                                                                     |

### FAQ

#### Troubleshooting

| Problem                                                                 | Solution                                                                                                                                                                                               |
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Rod or fishing log cannot be used                                       | Items added? `ox_inventory/data/items.lua` must contain `server = { export = 'pepper_fishing.<item>' }`. Do not rename the folder. Start your framework and ox\_inventory **before** `pepper_fishing`. |
| Items have no image                                                     | Copy all files from `install/images/` to `ox_inventory/web/images/`.                                                                                                                                   |
| "Pepper Fishing is still starting"                                      | Database not reachable – start `oxmysql` before `pepper_fishing`, check the console. Without CREATE permission import `install/pepper_fishing.sql`.                                                    |
| "You do not have permission"                                            | Grant the permission in `Config.Permissions` or use `add_ace group.admin pepper_fishing.admin allow`.                                                                                                  |
| NPC inside a wall, boat spawns on land                                  | The coordinates in `config/locations.lua` are approximations – adjust the station line or the `spawns` point.                                                                                          |
| No interaction at the NPC                                               | Check `Config.Interaction`. Without ox\_target/qb-target set `'textui'`.                                                                                                                               |
| "Your rod cannot cast that far"                                         | The landing point is outside the cast range – move closer or buy a better rod.                                                                                                                         |
| "Pick a bait first"                                                     | Pick a bait under **Bait** in the fishing log – it has to be in your inventory.                                                                                                                        |
| "… is worn out"                                                         | Durability 0 – repair the part at the tackle shop.                                                                                                                                                     |
| "You can only do that at the station itself"                            | Buying, selling, repairing and renting only works at the NPC.                                                                                                                                          |
| Fishmonger refuses fish                                                 | Illegally caught fish are only bought by the black market dealer.                                                                                                                                      |
| Black market dealer missing                                             | Level 15+, night only (21:00–05:00 game time), the location changes daily. Jobs from `Config.Illegal.HiddenForJobs` never see him.                                                                     |
| Black market pays cash (QBCore/Qbox)                                    | `Config.DirtyMoney` uses `cash` there – or enter your own account.                                                                                                                                     |
| Open-sea fish do not bite                                               | Level 15+, boat only, and at 25 m water depth or more (`Config.Zones.DeepDepth`).                                                                                                                      |
| Sonar will not turn on                                                  | Bought and equipped a sonar? It only runs in or on a boat (`G`).                                                                                                                                       |
| Police get no alert                                                     | The alert only fires with a probability (3% + suspicion). Check `Config.Control.Jobs` and dispatch.                                                                                                    |
| "No room in your inventory" on a catch                                  | Make room – the catch stays put for up to 60 seconds, then it is released.                                                                                                                             |
| Rental boat will not start (no key)                                     | Add your key script in `bridge/server/keys.lua` or `bridge/client/keys.lua` – qbx\_vehiclekeys, wasabi\_carlock, MrNewbVehicleKeys, qb-vehiclekeys and Renewed-Vehiclekeys are already supported.      |
| Rental boat has no fuel                                                 | Add your fuel script in `bridge/client/fuel.lua` (`Config.Boats.FullTank`).                                                                                                                            |
| "The anchor will not hold here" / "The boat is too fast to drop anchor" | Slow down first (`Config.Boats.Anchor.MaxSpeed`, default 3 m/s); in some places GTA does not allow anchoring.                                                                                          |
| Red console message: "standalone"                                       | No framework was running at start – start `es_extended`, `qb-core` or `qbx_core` **before** `pepper_fishing` in your `server.cfg`.                                                                     |

#### Questions

<details>

<summary>Is fishing a job?</summary>

No. Pepper Fishing is an activity for every player – no job, no whitelist. Police and rangers get their own role through inspections.

</details>

<details>

<summary>Do I need addon models or a map?</summary>

No. Rods, floats, boats, NPCs and treasure chests are vanilla GTA models. Players fish at any water on the map.

</details>

<details>

<summary>Does it run without ox_inventory?</summary>

No, ox\_inventory is required. Every fish carries weight, length, quality, water type and angler in its item metadata – other inventories cannot do that in this form.

</details>

<details>

<summary>Do I have to use ox_target?</summary>

No. `Config.Interaction = 'auto'` picks ox\_target, otherwise qb-target, otherwise TextUI (key E).

</details>

<details>

<summary>How long does it take to reach level 100?</summary>

About 150 hours of play with the defaults – that figure comes from a simulation in the resource's tests. Adjust it with `Config.Level.XpMultiplier`: `2.0` halves the time, `0.5` doubles it.

</details>

<details>

<summary>Can I adapt prices to my server economy?</summary>

Yes. `Config.Economy.PriceMultiplier` scales all fish prices at once. Individual prices are per species in `config/fish.lua`, gear and baits in `config/gear.lua`, boat rent in `config/locations.lua`.

</details>

<details>

<summary>Can I add my own fish species?</summary>

Species are data in `config/fish.lua` (open). A new species needs an entry there, names in `locales/*/fish.json`, an item in `ox_inventory` and an image.

</details>

<details>

<summary>Can I turn the license off?</summary>

Yes: `Config.License.Required = false`. Fishing without a license is then no longer a violation.

</details>

<details>

<summary>Can the police see the black market?</summary>

No. Jobs from `Config.Illegal.HiddenForJobs` do not see the dealer. Police and rangers learn about poaching through the alert and inspections.

</details>

<details>

<summary>What happens on a server restart?</summary>

Running casts and fights end. Profiles, lexicon, records, market prices, tournament results, the season and boss fish cooldowns are stored in the database.

</details>

<details>

<summary>How do I switch to German?</summary>

`Config.Locale = 'de'` in `config/config.lua` (that is the default). Use `install/ox_items.lua` for the items.

</details>

### Changelog

#### 1.0.0 – 2026-10-04

**Initial release**

* Fishing at any water with a fight minigame: line tension, runs, dives, jumps, line breaks, thrown hooks
* 83 fish species across coast, open sea, lake, river and swamp, 12 legendary boss fish with sightings
* Levels 1–100, 10 ranks, skill tree with 4 branches and 24 perks
* Gear with durability (rods, reels, lines, hooks, sonars) and 12 baits
* Time of day, weather, tides, season and bite forecast
* Catch camera, catch card, fish lexicon, server records, leaderboards, hall of fame, 36 achievements
* Dynamic fish market, daily and weekly orders, restaurant deliveries
* Boat rental with 8 boats at 4 stations, fishing from boats (your own too), anchor on a key, sonar with shoals and hotspots
* Tournaments with live standings, fishing season with rewards
* Fishing license, closed seasons, protected species, restricted zones, black market, inspections with a fine catalog
* Bycatch and treasure (message in a bottle, treasure map, chest)
* Fishing log (item) and NPC stations, interaction via ox\_target, qb-target or TextUI
* 124 ready-made ox\_inventory items with images, item files in German and English
* Admin page in the fishing log, 5 Discord webhooks, 3 server exports (`getProfile`, `getLevel`, `isFishing`)
* Alert to police/rangers via ps-dispatch, cd\_dispatch, qs-dispatch, rcore\_dispatch, core\_dispatch or built in
* ESX Legacy, QBCore and Qbox · German and English, all texts adjustable in `locales/`
