Documentation

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.

Overview

Pepper Fishing turns fishing into a long-term activity for every player – no job, no whitelist. Anyone using the fishing rod (item fishing_rod) casts at any water, sets the hook on the bite and fights the fish with line tension: too much pull and the line snaps, too little and the fish gets off. Then the catch card shows species, rarity, weight, length and quality – keep it or release it. Everything else lives in the fishing log (item fishing_book): fish lexicon, gear, skill tree, orders, fish market, tournaments, leaderboards and map. Buying, selling and renting happens at NPC stations (tackle shop, fishmonger, boat rental, restaurant, black market).

Note: All coordinates in config/zones.lua and config/locations.lua are approximations. Check them on your server and adjust single lines if an NPC stands inside a wall or a boat spawns on dry land.

Features

  • Fight minigame with line tension, runs, dives and jumps (A/D) – including line breaks and thrown hooks
  • 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 their own trophy
  • Levels 1–100 with 10 ranks, duration adjustable in the config (Config.Level.XpMultiplier), skill tree with 4 branches and 24 perks
  • Catch camera and catch card with rarity, weight, length, quality, "new" and record stamps – 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 (7 natural baits, 5 lures)
  • Boat rental at 4 stations with 8 boats (vanilla GTA models only), fishing from your own boat, anchor on a key, sonar showing shoals and hotspots
  • Fish lexicon as a collection album with personal bests, server records and leaderboards, 36 achievements
  • Dynamic fish market (market factor 0.6–1.5, 3 wanted species per day at +50%), 3 daily and 2 weekly orders, restaurant deliveries
  • Tournaments (4 types, 10–60 minutes) with live standings and prize money, scheduled automatic tournaments, fishing season (30 days) with rewards
  • Fishing license (inland + coast / open sea), closed seasons, protected species, 4 restricted zones, black market, inspections by police or rangers with a fine catalog
  • Bycatch and treasure: 8 junk items, message in a bottle with treasure map (16 treasure spots), chests, pearls
  • 124 ready-made ox_inventory images, items in German and English
  • Admin page in the fishing log, 5 Discord webhooks, 3 server exports
  • German & English, open config, locales, bridges and install files

Requirements

Dependency Required/optional Used for Link
FiveM server build ≥ 7290 required declared in fxmanifest.lua as /server:7290 https://runtime.fivem.net/artifacts/fivem/build_server_windows/master/
OneSync required server logic, boats, nearby inspections https://docs.fivem.net/docs/scripting-reference/onesync/
ESX Legacy, QBCore or Qbox required (one of them) money, jobs, identifiers – Config.Framework = 'auto' detects it https://github.com/esx-framework/esx_core
ox_lib required UI building blocks, callbacks https://github.com/overextended/ox_lib
oxmysql required database (MySQL/MariaDB) https://github.com/overextended/oxmysql
ox_inventory required fish carry weight, length and quality in their metadata https://github.com/overextended/ox_inventory
ox_target or qb-target optional talking to NPCs – without a target resource it uses TextUI https://github.com/overextended/ox_target
Dispatch (ps-dispatch, cd_dispatch, qs-dispatch, rcore_dispatch, core_dispatch) optional poaching alerts – without one the built-in alert is used –
Vehicle keys (qb-vehiclekeys, Renewed-Vehiclekeys, qbx_vehiclekeys, wasabi_carlock, MrNewbVehicleKeys) optional keys for rental boats via bridge/*/keys.lua –
Fuel script (ox_fuel, LegacyFuel, cdn-fuel, ps-fuel, lj-fuel, lc_fuel, qb-fuel) optional rental boats handed over with a full tank (bridge/client/fuel.lua) –

Installation

  1. Download the resource from the Cfx.re Portal (Granted Assets)
  2. Extract to resources/[pepper]/pepper_fishing – do not rename
  3. Add the items: paste the contents of install/ox_items_en.lua (English) or install/ox_items.lua (German) into ox_inventory/data/items.lua before the last }
  4. Copy the images: all files from install/images/ to ox_inventory/web/images/
  5. Database: tables are created automatically on first start. Without CREATE permission import install/pepper_fishing.sql first
  6. Check config/config.lua (language, interaction, money, license), config/server.lua for webhooks
  7. Add to your server.cfg after the dependencies:
ensure oxmysql
ensure ox_lib
ensure es_extended      # or qb-core / qbx_core
ensure ox_inventory
ensure pepper_fishing
  1. Start the server – the console shows Pepper Fishing 1.0.0 started (framework: …, species: 83, server records: …, season: …)
  2. In-game: buy a rod, fishing log, bait and a license at the tackle shop, walk to the water, use the rod

Items

Item Purpose
fishing_rod use = fishing mode on/off (one item for all rod tiers – gear is stored in the profile)
fishing_book opens the fishing log
fishing_license optional document for the license (Config.License.GiveItem = true)
bait_*, lure_* 12 baits
fish_<species> 83 fish species – weight, length, quality in the metadata
fish_legend_<id> 12 boss trophies
junk_* 8 bycatch items
message_bottle, treasure_map, treasure_chest, pearl, old_coin, antique_compass treasure and valuables

Usable items carry the line server = { export = 'pepper_fishing.<item>' } – it is already in the item files.

First test

  1. Log in as admin and buy a rod, the fishing log, a bait and the basic license at the tackle shop (blip)
  2. Pick the bait in the fishing log under Baits, walk to the water and use fishing_rod
  3. Hold and release the left mouse button – on the "!" press E to set the hook and fight the fish
  4. Press E on the catch card: the fish lands in your inventory with weight and length
  5. Sell it at the fishmonger – the money goes to Config.Economy.Account

Configuration

File Contents
config/config.lua language, framework, interaction, items, keys, cast, bite, fight, levels, money, market, license, illegal fishing, inspections, tournaments, bosses, treasure, boats, permissions, blips, HUD
config/fish.lua 83 fish species, 12 boss fish, bycatch
config/gear.lua rods, reels, lines, hooks, sonars, baits
config/skills.lua skill tree
config/zones.lua waters, hotspots, restricted zones, shoal areas
config/locations.lua NPC stations, boat rental, restaurants, black market, treasure spots
config/progression.lua ranks, unlocks, orders, deliveries, achievements, season rewards
config/server.lua webhooks, admin ACE (never sent to clients)

Key options:

Option Default Meaning
Config.Locale 'de' language (de / en)
Config.Framework 'auto' auto, esx, qbcore, qbox
Config.Interaction 'auto' talking to NPCs: auto (ox_target → qb-target → TextUI), ox_target, qb-target, textui
Config.Command false optional command (e.g. 'fishinglog') – opens the fishing log without the item
Config.Level.XpMultiplier 1.0 scales all XP – by default about 150 hours of play to level 100 (simulation), 2.0 = twice as fast
Config.Economy.PriceMultiplier 1.0 scales all fish prices
Config.Economy.Account 'cash' account for sales, purchases, rent, orders
Config.DirtyMoney ESX black_money, QBCore/Qbox cash account for black market income per framework
Config.Fight.Difficulty 1.0 fight difficulty (0.8 easier, 1.2 harder)
Config.License.Required true fishing without a license is a violation
Config.License.Prices basic = 2500, sea = 12000 license prices
Config.Illegal.MinLevel 15 level needed to find the black market
Config.Illegal.HiddenForJobs police, sheriff, ranger these jobs never see the black market dealer
Config.Control.Jobs police, sheriff, ranger these jobs may inspect anglers
Config.Zones.DeepMinLevel 15 open-sea fish bite from this level (boat only)
Config.Tournaments.Auto.Enabled true automatic tournaments every 120 minutes with 4+ players online
Config.Boss.Announce 'all' announcement on a boss catch: all, anglers, none
Config.Boats.Deposit 2500 deposit per rental boat
Config.Boats.FullTank true rental boats are handed over with a full tank
Config.Boats.Anchor on, key 'H', command 'anker' drop/weigh anchor (OnlyRental, MaxSpeed)
Config.Presentation.Camera true camera move on a catch

Gameplay

A catch step by step

  1. Fishing mode: use the fishing_rod item – rod in hand, the fishing HUD shows bait, gear and water. X stows it
  2. Cast: hold the left mouse button (power meter), release. The landing point has to be water
  3. Wait: bite time depends on bait, water, conditions, shoals and perks (6–38 s by default)
  4. Bite: sound and "!" – strike with E or left click (1.6 s window, hooks and a perk extend it)
  5. Fight: hold left mouse button or space = reel, release = give line. Keep the tension in the green zone; press A or D on jumps
  6. Catch card: E keep (item in your inventory) or R release (+25% XP). Without a decision the server decides after 30 s
  7. Sell: at the fishmonger – or use the catch for an order, a restaurant delivery or a tournament

The server rolls species, weight and quality, checks cast range, zone and fight duration and hands out XP, money and items.

License, illegal fishing, inspections

  • License: basic (inland waters + coast, $2,500) and sea (open sea, $12,000), bought at the tackle shop, duration Config.License.Days (0 = permanent)
  • Violations: fishing without a license, keeping a protected species or a closed-season fish, fishing in a restricted zone, exceeding the daily keep limit (Config.Illegal.DailyKeepLimit, off by default)
  • Suspicion (0–100): rises per violation, drops by 0.5 per minute. Alert to police/rangers: 3% + suspicion × 0.4% (max. 45%), at most every 300 s per player
  • Black market: from level 15, dealer only at night (21:00–05:00 game time) at one of 5 locations (changes daily), buys illegal fish at 1.8× for dirty money
  • Inspection: jobs from Config.Control.Jobs inspect a player within 4 m (target or /fishcheck): license, violations, illegal fish. Actions: confiscate, fine (6 catalog entries), revoke the license for 3 days

Dispatch and webhooks

Dispatch

Config.Illegal.Dispatch.Mode (optional, default auto) picks the first running integration: ps-dispatch, cd_dispatch, qs-dispatch, rcore_dispatch, core_dispatch. Without one, the jobs from Config.Control.Jobs get a message and a blip. false turns the alert off. Customizable in bridge/server/dispatch.lua.

Webhooks

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

Key Contents
catches special catches: epic fish, server records (ServerConfig.WebhookMinRarity)
bosses boss fish: sightings and catches
tournaments tournament results, end of season
illegal alerts, inspections, fines, black market sales
security suspicious cases from the plausibility check

Commands and permissions

Commands

Command Default Function
Config.Command off (false) e.g. 'fishinglog' → opens the fishing log without the item
/fishcheck on (Config.Control.Command) inspect the nearest player (requires the control permission)
/anker on (Config.Boats.Anchor.Command) drop or weigh the anchor

Admin tasks (set level/XP, grant a license, start/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.

Permissions

Permissions are re-checked on every server call. Admin = ACE pepper_fishing.admin or a group from Config.AdminGroups (admin, superadmin, god) – admins have every permission.

Permission What for Default
tournament create and cancel tournaments group admin or ACE pepper_fishing.tournament
control inspect anglers: check license, confiscate, fine, revoke license jobs police, sheriff, ranger, group admin or ACE pepper_fishing.control

Every permission can be granted via ace, groups, jobs (job + minimum grade), items or everyone = true:

add_ace group.admin pepper_fishing.admin allow
add_ace group.mod pepper_fishing.tournament allow

Keys

Key Function
Left mouse button cast (hold = power) / reel
Space reel (alternative)
E strike / keep the catch
R release the catch
A / D counter a jump
Alt switch bait
G sonar on/off (in or on a boat only)
H drop/weigh anchor (on the boat)
X stow the rod / cancel

Change keys in Config.Keys (GTA control IDs). Players change the anchor key (Config.Boats.Anchor.Key) in the GTA settings under Key Bindings → FiveM.

Exports and framework bridge

Exports (server)

-- server, read-only
exports.pepper_fishing:getProfile(src)  -- public angler profile or nil
exports.pepper_fishing:getLevel(src)    -- fishing level (0 = profile not loaded)
exports.pepper_fishing:isFishing(src)   -- true while waiting, on a bite or in a fight

Framework bridge

bridge/server/{esx,qbcore,qbox}.lua provide money, job and identifier, bridge/server/inventory.lua the items (ox_inventory), bridge/server/dispatch.lua the alert, bridge/client/frameworks.lua job and notifications on the client. bridge/server/keys.lua and bridge/client/keys.lua hand out the key for the rental boat, bridge/client/fuel.lua fills it up. If no framework is running, bridge/server/standalone.lua takes over as an emergency mode. All bridges are open.

Troubleshooting

Problem Solution
Rod or fishing log cannot be used Items added? server = { export = 'pepper_fishing.<item>' } must be present; do not rename the folder
"Pepper Fishing is still starting" Database not reachable – start oxmysql before pepper_fishing, check the console
Items without an image Copy install/images/*.png to ox_inventory/web/images/
NPC misplaced or missing Coordinates in config/locations.lua are approximations – adjust the line
No interaction at the NPC Check Config.Interaction; without a target resource use 'textui'
"Your rod cannot cast that far" Cast range of the rod exceeded – move closer or buy a better rod
Buying/selling does not work Only works right at the station – on the road the fishing log is read-only
Black market dealer missing Level 15+, night only, location changes daily; police jobs never see him
Open-sea fish do not bite Level 15+, from a boat only and at 25 m water depth or more
Police get no alert The alert only fires with a probability; check Config.Control.Jobs and dispatch

FAQ

Is fishing a job?

No – it's an activity for every player, no job and no whitelist. Police and rangers get their own role through inspections.

Do I need addon models or a map?

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

Does it work without ox_inventory?

No, ox_inventory is required (listed in dependencies). Every fish carries weight, length, quality, water type and catcher in its item metadata.

I can't use the rod or the fishing log – what's missing?

Usually the items are missing from ox_inventory/data/items.lua, or the line server = { export = 'pepper_fishing.<item>' } is missing. Also, the folder must not be renamed, and your framework and ox_inventory must start before pepper_fishing.

The console says "Pepper Fishing is still starting" or tables are missing.

The database can't be reached: start oxmysql before pepper_fishing and check the console. If your database user has no CREATE permission, import install/pepper_fishing.sql first.

The console says "standalone" – my framework isn't detected.

No framework was running at startup. Start es_extended, qb-core or qbx_core before pepper_fishing in your server.cfg, or set Config.Framework to esx, qbcore or qbox.

Do I have to use ox_target?

No. Config.Interaction = 'auto' uses ox_target, then qb-target, then TextUI (key E).

An NPC stands inside a wall or the boat spawns on land.

The coordinates in config/locations.lua are approximations. Adjust the station's line or the spawns point and restart the resource.

How long does it take to reach level 100?

With the default values about 150 hours of play – the result of a simulation in the resource's tests. Config.Level.XpMultiplier = 2.0 halves that, 0.5 doubles it.

Can I adjust prices to my server economy?

Yes. Config.Economy.PriceMultiplier scales all fish prices at once. Per-species prices are in config/fish.lua, gear and baits in config/gear.lua, boat rents in config/locations.lua.

Can I add my own fish species?

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

Can I turn off the fishing license?

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

The black market pays regular cash on QBCore/Qbox.

Those frameworks have no dirty-money account, so Config.DirtyMoney uses cash by default. Enter your own account if your server has one.

How do I change texts or switch to English?

Config.Locale = 'en' in config/config.lua, and use install/ox_items_en.lua for the items. All texts are open in locales/de/*.json and locales/en/*.json.

What happens on a server restart?

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

How do I install an update?

Replace the pepper_fishing folder; back up your config/ and locales/ changes first and copy them back. The resource creates missing tables and columns on start; new items are listed in CHANGELOG.md.

Support

Open a ticket on Discord: https://discord.gg/6NaFJWKDYu (category "Script Support") – link your purchase with /verify first.

Permanently tested on the Pepper Scripts dev server.

Changelog

Current version: 1.0.0 (2026-10-04). All changes are listed on the updates page and in CHANGELOG.md inside the resource.


Found a mistake? Report it on Discord.