Everything starts at the fisher ped. Talk to them to go on duty, take missions, buy gear, sell your catch, claim achievements and rent a boat.
If Config.RequireJob is enabled, players must hold the job defined in Config.FisherJob before they can work. Interaction uses the E key by default, or third-eye if ox_target / qb-target is running and Config.Target is enabled.
Every key has a matching *KeyLabel next to it. The game cannot translate a control id into a label, so if you change the id, change the label too — otherwise the prompts will name the wrong key.
The core mechanic. Take out the rod, aim at the water, hold to charge the cast and release.
The prompt names the depth bandbefore you cast — shallow, mid, deep or abyss.
Each cast is a weighted draw, not a rarity ladder. Depth match, bait and cast power all shift the odds, and an empty ticket competes in the same draw.
Fight difficulty comes from depth, not from rarity, so a deep-water species can be common and still hard to land.
Every catch offers a keep or release decision. Releasing gives no item but pays more XP (×1.75, plus ×1.5 if it's a trophy), and the fish still counts for records and achievements either way.
Drop a crab_trap over water of at least 10 m. The cage sinks, a buoy floats above it, and a blip appears only on your own map. Traps survive server restarts.
Soaking is a curve, not a countdown: loot grows until Soak.FullAt (45 min). After that it stops accumulating and starts heading toward breaking (Decay.BreaksAfter 180 min, with a warning 15 min before).
Limit per player:1 base, +1 every 15 levels, up to 3.
Three nets are available: drift_net (lvl 10), trawl_net (lvl 20) and deepsea_net (lvl 32).
They are deployed from the helm of a boat rented from the job ped, and they fill by distance sailed, not by time — they only pay while the boat moves at a sensible speed over water of at least 4 m.
BreakLosesNet = true destroys the item when the net breaks; false returns it damaged. Loot is defined per depth band.
The only fishing done underwater, and the only way to catch sharks — no rod and no net will ever land one.
Sharks only exist while a hunt mission is accepted. With no active hunt there are no sharks anywhere on the map. Requirements: speargun + spear, and level 20.
Each shark rolls a temperament on spawn, and you cannot tell by looking:
Temperament
Weight
Behaviour
aggressive
35
Comes at you once it notices you
skittish
40
Flees once it notices you
indifferent
25
Ignores you until you shoot
AttackChance is 0 by default — sharks notice and approach, but don't bite.
Air is optional. The dive_tank is a supply, not a longer lung: it drains one second per second underwater from 600 s, and refills at 5/s at the surface. While air remains you cannot drown; once empty, the game takes over. Without a tank you have GTA's default ~40 s, and the hunt zones are placed so that this is tight but doable.
Both produce the same three items (brochette_fish_raw → _cooked / _burn).
Campfire — use /campfire. Costs 3 logs of any type listed in Fuel.Items (oak_wood, pine_wood, maple_wood, shared with qs-lumberjack). It burns for 20 minutes on server clock, so it goes out at the same second for everyone and returns whatever is still on it.
Grill boat — place the skewer_grill_boat on solid ground. Skewers cook 18 s per side and burn at 30 s; the gap between the two is your window to flip them. The 4 grill slots are the difficulty. Customers arrive every 5–15 s, order 1–3 skewers, and pay 24 per skewer delivered.
Four tiers (dinghy … dinghy4), rented per player, per session, with no persistence. Returning the boat within 45 m of the rental point refunds 40 %.
If a vehicle keys script is installed it is detected automatically; otherwise Config.Vehiclekeys falls back to 'none' and rental keeps working normally.
Levels are uncapped, but bonuses are not — they stop scaling at Config.MaxBonusLevel (60). Without that cap, a long-lived character reaches instant catches and the minigame stops existing.
Missions are taken from the job panel, and can be run solo or as a party of up to 4 members (leader included). Invites are validated on the server within 20 m.
Party payout is controlled by Config.MissionPayout:
'members'(default) — every member receives the full payout. A party of 4 on a 2000 mission costs the server 8000.
'split' — the payout is divided between everyone present on completion.
fishAmount does not scale with party size: four players bring the same ten fish as one. With 'members' that's four times the pay for the same work — it's the generous setting, and it ships by default so it doesn't disturb an existing server's economy.
Species achievements are generated automatically — one per fish in Config.Fish — so adding a species adds its achievement with no extra work.
Since v3.x, achievements are claimed from the job ped, not paid on unlock.
The leaderboard tracks six counters: total, seasonal and daily experience and earnings. Daily resets at 00:00, and season resets on the 1st of each month at 00:00. The top three of each board receive Config.LeaderBoardRewards.
Config.MaxLeaderboardPlayers (100) caps the SQL query. Raising it costs query time on every refresh (Config.UpdateLeaderboard = 1 min).
One command, one screen: /fisheradmin. The entire config.lua can be edited from there, and the Events tab starts a tournament or a hotspot and shows what's already running so you can stop it.
cfg
add_ace group.admin command.fishing allow
Permissions are always verified on the server — when opening the panel and again on every button inside it.
A setting saved there is SAVED, not applied. It takes effect on the next resource restart, and the panel says so until it happens. This is deliberate: changing a table underneath code that is already using it isn't a settings change, it's breaking the cast of whoever is fishing.