FIELD MANUAL // Activities

DeepCatch Fishing

Documentation from the supplied script archive. Check your included resource files for the version you install.

DeepCatch Fishing

Pro-level fishing for Qbox, QBCore and ESX: a tension reel minigame, a real tackle system (every rod comes with its own reel; you pick the line and the bait), 41 species across fresh water, saltwater and offshore (salmon hunting the bait balls you find on the sonar), a full tackle store with a cart, a fish-finder HUD, progression, a journal and leaderboards.

Requirements

  • ox_lib
  • oxmysql
  • One of: qbx_core, qb-core, es_extended
  • One of: ox_inventory, qb-inventory (or a fork), ESX default inventory
  • Optional: ox_target or qb-target (falls back to a text prompt)

Install

  1. Put the deepcatch folder in your resources folder.
  2. Add it to server.cfg after your framework, inventory and target: ensure deepcatch
  3. Add the items to your inventory: - ox_inventory: open install/items_ox_inventory.lua, copy everything, and paste it just above the last } in ox_inventory/data/items.lua. - qb-inventory: paste install/items_qb.lua just above the last } of QBShared.Items in qb-core/shared/items.lua. - ESX inventory: run install/items_esx.sql on your database.
  4. Copy the pictures in install/images/ into your inventory's image folder: - ox_inventory: ox_inventory/web/images/ - qb-inventory: qb-inventory/html/images/
  5. Optional custom boats (each is its own resource, sold at the marina like the rest): ensure deepcatch_bassboat # Obsidian 21 (dc_bassboat) ensure deepcatch_cuddy # Steelhead 26 cuddy cabin with downriggers (dc_cuddy) Without them, their marina entries just fail to spawn - remove them from config/boats.lua if you don't use them.
  6. Restart the server. The database tables are created automatically.
  7. Check the server console for [deepcatch] Items OK. If items are missing it tells you which ones.

Test it in-game with /deepcatch_kit (admin), which gives you a rod and some worms.

Updating from an older version? Replace the old DeepCatch block in your items file with the new one. Item names that already existed are unchanged. Just adding the tournaments to a server that already has the rest: install/items_ox_inventory_tournament.lua has only the new items (the three trophies and the Champion's Gold rod), and their pictures are in install/images/.

How it plays

  • New here? Buy the Starter Kit. It's the first card on the Rods tab of the tackle store: a rod, a tackle box, line, 20 worms and 10 shrimp for $425 (worth $510 bought separately). Change what's in it, the price, or turn it off in Config.StarterKit (config/gear.lua).
  • Use a rod from your inventory to take it out. Hold left mouse to charge a cast and release to throw.
  • Tackle box: it's an item, sold on the Gear tab of the tackle store for $75.
  • G (rebindable), or using the item, sets it down in front of you: a custom two-drawer hard case (streamed as dc_tacklebox). On a boat deck it rides along with the boat.
  • That's the one way in: third-eye the box where it's set down to open it, pack your gear into it, take some out, or pick it back up.
  • G works with a rod out too, while your line's in or out waiting. Without a box, G does nothing off the water, so it doesn't get in the way of other scripts.
  • If you log off with it set down, it's put back in your inventory next time you load in.
  • Work the lure while the line is out: hold left mouse to reel it in (the cast ends when it reaches you), right mouse to jig or twitch it. Each bait says how it wants to be fished:
  • Jigs, plastic worms, spoons and poppers: work them with right mouse, about a pop a second.
  • Spinners, crankbaits and trolling skirts: reel them in. Fish hit them while they're moving.
  • Live and natural bait: cast it out and let it soak. Fished the right way, a lure gets bites sooner and a little extra luck. It's checked on the server, so spamming the buttons gains nothing.
  • When the fish takes it, click to set the hook. If it hits while you're reeling the lure in, just keep reeling. Fake nibbles come first.
  • Reel minigame: hold left mouse to reel. Keep the tension bar in the white zone. When the fish runs, let it take line and reel between runs, or the line snaps.
  • Fish finder: shows the water type, the depth under your bobber, fish on the sonar, and the species your bait targets.
  • The fish live where real fish live. They gather at structure: dock pilings, the shade under docks, rocks, drop-offs, deep holes and the bank.
  • Featureless flats hold few. Out deep, the open-water fish roam, and they keep off the bank.
  • At dawn, dusk and night they come up shallow. Around midday they sit deeper and tight to shade.
  • Some spots are always better than others, so you can learn them.
  • They're already there before you arrive: the water about 95 m around you is filled ahead of you.
  • They stay put while nobody's around, so they're there when you come back. A fished-out spot fills again after a while.
  • /dcwater shows what the spot you're standing in holds.
  • Everyone sees the same water. The fish, sharks, bait balls, whales and dolphins are shared, so point one out and your friend sees it too.
  • Each group of fish is swum by one player's game and sent to everyone near it. When that player leaves, the nearest player takes it over.
  • A fish can go for anyone's lure, not just the lure of the player whose game swims it.
  • Whales and dolphins are networked animals.
  • Turn either off with shared = false in config/ecosystem.lua (Config.Ecosystem / Config.SeaLife).
  • Water types are detected automatically:
  • Lakes and rivers count as freshwater.
  • The coast counts as saltwater.
  • Water deeper than 35 m counts as offshore, and needs an offshore-capable rod.

Boats and fish finders

  • Marina: shops with the marina service sell boats and marine electronics. Boats are saved per character in deepcatch_boats with their own plate.
  • My Fleet: launch a boat and you're put at the helm with keys and fuel, then dock it again at any marina. The boat drops anchor automatically when you leave the helm, so you can fish off the deck.
  • Fish finders are items. Buy one in Electronics, then install it on a boat in My Fleet. Anyone on board sees the unit, and K (rebindable) toggles the display.
Unit Tier What it shows
SonarLite 4 1 2D sonar, real depth under the boat, water temp, speed, fish activity, bottom hardness
ChirpVision 7 2 Clean CHIRP arches with fish-ID depth labels, thermocline, GPS readout, compass pointing to the best nearby hotspot
ProScan 12 SideView 3 Split CHIRP and DownView imaging, live heat map of the water around you, trophy zones marked
  • The unit on the dash: each finder is a real 3D unit on a swivel mount (dc_finder_basic, dc_finder_chirp, dc_finder_pro). Installed on a boat that has a mount spot, it stands on the dash where everyone nearby can see it. The Steelhead 26 has one in the middle of its dash. The Obsidian 21 runs a pair: one on the console above the wheel and one on the bow cap for the trolling motor angler. While you're aboard, the unit's own screen shows your live display. Add mount spots for other boats in Config.FinderMounts, and turn the live screen off with Config.FinderScreen.live = false.
  • Bow-mount trolling motor (Obsidian 21): stand on the casting deck at the bow and press Y (rebindable) to deploy it. It swings down over the bow and slides into the water. Then:
  • Up / Down arrows set the speed (0 to 10).
  • Left / Right arrows steer the motor, and the bow follows it. It turns all the way round.
  • Down at 0 turns Spot-Lock on or off, which holds the boat where it is. Up gets you going again.
  • Press Y again to stow it. Taking the helm stows it too.
  • Running it raises the anchor and cancels cruise control. Everyone nearby sees the motor deploy, steer and the prop spin.
  • Tune it in Config.TrollingMotor (top speed, turn rate, keys). The Obsidian 21 has no bow seat, so it has 3 seats; its seat layout loads when players connect.
  • Power-Pole anchors (Obsidian 21): an arm and a spike on each transom corner. Stowed they stand up together; whenever the boat anchors (leaving the helm, the trolling panel, stowing the trolling motor) the arms swing out to the sides and the spikes go straight down into the water, and they fold back up when the anchor's raised. The trolling motor's Spot-Lock holds the boat without them. Set them up in Config.PowerPoles.

  • Tandem trailer (Steelhead 26): the cuddy has its own tandem-axle trailer too (dc_cuddytrailer, in the deepcatch_cuddy resource): hot-dip galvanized I-beam frame, tandem leaf springs, aluminium tandem fenders with a charcoal band and white DEEPCATCH lettering, grey carpeted bunks, keel rollers, a winch stand with a V bow stop, white guide-on posts with LED lights, a swing-away jack and a spare. It works exactly like the bass trailer below (On trailer, hitch, launch, haul out, dock); its measurements are in its trailer.geo in config/boats.lua.

  • Boat trailer (Obsidian 21): the boat has its own trailer (dc_basstrailer, in the deepcatch_bassboat resource): a single-axle bass trailer with a black powder-coated frame, carpeted bunks, keel rollers, a winch stand with a V bow stop, diamond-plate fenders, guide-on posts with LED lights, a swing-away jack and a spare. At any marina, On trailer (My Fleet) puts the boat on it at the roadside, strapped down. Then:
  • Hitch up: back any car or truck up slowly until its back bumper is at the coupler: it hitches by itself, on a ball just behind the truck's back bumper at the height that keeps the trailer level (any car or truck, GTA's or custom). If a truck's ball still sits wrong, third-eye the hitched trailer and pick Adjust hitch: the up / down arrows raise and lower the ball, left / right slide it in and out (the way the arrow points on screen; hold to keep it moving), Enter saves it for that truck model (on the server, for everyone), R puts it back to automatic, Backspace cancels. The keys show in the help box while you adjust. Or third-eye the trailer and pick Hitch up (the nearest vehicle whose back is within a couple of metres of the coupler). Unhitch is there too. While the boat is strapped down its engine is off and won't start.
  • Outboards tilt up on the trailer: strapped down, the motor (both on the Steelhead) sits tilted up for the road; launched, it drops back down and the prop turns as it runs. The boat's motors (config/boats.lua) names its extras.
  • Launch anywhere: back the trailer down a ramp or a shore until the stern floats, get out, third-eye the trailer and pick Release the boat. The boat slides off and drops anchor right there.
  • Haul out: with the trailer in the water, drive the boat up onto the bunks, lined up and slow, and press E (the horn key) when it says so: it's winched up and strapped down.
  • Put it away: tow it back to any marina and Dock it in My Fleet. Boat and trailer go together.
  • /boattrailer does whichever of hitch / unhitch / release fits, at the trailer you're standing by (for servers without a third-eye).
  • Tune it in Config.Trailer (config/boats.lua). Set marina = { trailerSpawn = vec4(...) } on a shop (config/shops.lua) for where its trailers go (Puerto Del Sol has one); if that spot is taken, or a shop has none, the trailer goes on the nearest clear road by the marina.

  • Fish schools: the water is divided into 80 m cells that reshuffle every 20 minutes.

  • Busy cells bite up to 50% faster and roll better fish.
  • Trophy cells add a big luck bonus.
  • The server works these out itself. The finders are how players find them.

Tune it all in config/boats.lua. The marina docks and boat spawn points are in config/shops.lua. Check each spawn point is in open water on your map.

Trolling

On a DeepCatch boat, press J (rebindable) to open the trolling panel. It's the one boat key to remember: it has a Livewell button, and its Display switches turn the fish finder on and off.

Only the boats in Config.Trolling.boats can troll: out of the box, just the Steelhead 26. On any other boat the panel keeps the livewell, the anchor and the display switches, without the spread or cruise control.

  • The spread: set a line in each rod holder (4 on most boats, 2 on the Dinghy) by picking a rod, a trolling rig and a lure or bait.
  • Fill N empty puts that setup on every empty holder in one click: the rod you picked, then more of that model (from your tackle box, set up the same way, then your pockets), each with that rig and lure. It stops at the first thing you run out of.
  • A new line starts from the last one you set (the same rod model, rig and lure, while you have them).
  • Save the spread once it's out and next trip it's one click to set it all again.
  • The rods show up in the holders for everyone nearby, with their lines trailing behind the boat.
  • Planer boards run wide, dipsy divers run deep, and downriggers show their cable going straight down.
  • Cruise control holds a trolling speed, even after the captain leaves the helm to tend the rods. The throttle and brake still override it.
  • Anchor drops or raises the anchor. The boat won't auto-anchor while cruise control is engaged.
  • Strikes:
  • The server times strikes on each line from the boat's real speed, the rig's best speed range, the rod, rig and lure, and the fish schools you're trolling through.
  • When a rod goes off it shakes and gets a marker, and a banner shows. Anyone on board has 14 seconds to walk to it and press E.
  • After the fight the rod goes back in its holder and the line is set again.
  • The line owner pays for bait, and whoever grabbed the rod keeps the fish.
  • Trolling gear (Trolling Gear section of the tackle store):
Rig Depth Best speed Good for
Flatline (no rig) surface 1.5–4.5 mph all-round
Inline Trolling Weight ~13 ft 1.5–3.2 mph bass, walleye, stripers
Planer Board ~5 ft, runs wide 1.5–3.5 mph pike, bass, barracuda, mahi
Dipsy Diver ~30 ft 1.5–3.2 mph walleye, sturgeon, halibut, tuna
Downrigger Cannonball ~60 ft 1.2–2.8 mph sturgeon, swordfish, coelacanth
Daisy Chain Teaser surface 5–9 mph marlin, mahi, tuna, mako
  • Rig targets stack with the lure's targets. A dipsy diver with a crankbait is a walleye machine. Lures marked ★ in the panel troll best.
  • A snapped line takes the lure and the rig with it.

Tune it in config/trolling.lua. If the auto-placed rod holders sit wrong on a boat, set exact positions in holderOverrides.

Bank rod holders

Fish more than one rod from the bank. Three holders are sold on the Gear tab of the tackle store:

Holder Rods Bite alert Level
Bank Stick 1 a bell on the rod tip 1
Surf Sand Spike 1 (stands the rod up high on the beach) a bell on the rod tip 3
Rod Pod 3 electronic bite alarms: a bleep at every touch, a scream on a run, the LED lit 8
  • Set one down: use the item. A ghost of it follows where you look (on flat ground, out of the water, the rods leaning the way you face). Scroll turns it, E sets it down, Backspace cancels.
  • Stand a rod in it: cast as usual, walk to your holder and press E. The rod stays out there fishing and your hands are free to cast another (up to 3 rods out, maxRods).
  • A bite: the rod pulls round and bounces, the line goes tight and the float gets dragged under. You hear the bell or the alarm (no message: strikeHints). Get to it within strikeWindow seconds and press E to pick it up and fight the fish. After that the rod is in your hands to re-bait, cast and stand back in the holder.
  • Third-eye a holder to reel a rod in or pick the holder up.
  • With real fish on, the fish in the water find the bait in a holder the same as one in your hands. Only the owner can grab a rod (ownerOnly).
  • A rod in a holder is out of your inventory (bank holders and boat holders alike), so it can't be cast, sold or given away while it's out there. It comes back when you grab it, reel it in, pull the line or pick the holder up. A docked boat keeps its rods (back in the rack next launch). Anything left out when you log off or the server restarts is put back in your inventory next time you're in.

Tune it in config/bankrods.lua.

Already added the items before? Paste install/items_ox_inventory_rodholders.lua (just the three holders) into ox_inventory/data/items.lua, and copy rod_holder_bank.png, rod_holder_sand.png and rod_pod.png from install/images/.

Mounted fish

Keep a fish worth remembering and have it mounted. Third-eye any tackle shop's shopkeeper and pick Taxidermy.

  • Mount one: the menu lists the fish in your bag with the fee for each. The fee is base + perKg x weight, higher for a trophy and capped at max. You get a Mounted that carries the fish: its weight, whether it's a trophy, who caught it and the date. In ox_inventory it shows that fish's own picture.
  • Hang it: use the item. A ghost of it follows where you look on any wall within reach. Scroll tilts the fish (hold Shift for fine steps), R turns it to face the other way, E hangs it and Backspace cancels.
  • What you see: the real fish prop at the size you caught it, set in a taxidermist's arch with the head and tail swept out from the wall. Flatfish and rays lie on their bellies. It sits on a lacquered walnut board with a brass plate, and the board is the smallest of three stock sizes (0.5, 1 or 2 m) that fits the fish. Sharks and marlin run past the ends of the big board, as real big-game mounts do.
  • It stays up. Mounts are saved (the deepcatch_mounts table) and everyone sees them. Third-eye one to read its plate. Only the player who hung it can take it down, which puts it back in their bag. Staff can take any down with the deepcatch.mounts ace, e.g. add_ace group.admin deepcatch.mounts allow.
  • Works inside interiors and housing. It needs an inventory with item metadata (ox_inventory or qb-inventory).

Tune it in config/shops.lua (Config.Taxidermy): the fee, mounts per player, reach, draw distance and the boards.

Already added the items before? Paste install/items_ox_inventory_mounts.lua (just the mount) into ox_inventory/data/items.lua, and copy fish_mount.png from install/images/.

Tournaments

Fishing competitions run the way real ones do, at the weigh-in station in Puerto Del Sol (the trophy flag on the map): a stage with the OFFICIAL WEIGH-IN backdrop, a tournament scale with a big red LED readout, a live results board, release tanks, feather flags and a registration tent. The weighmaster runs the scale; the clerk under the tent takes sign-ups.

  1. Sign up at the desk (third-eye the weighmaster or the clerk). The entry fees make the prize pool, plus the added purse once enough anglers are in.
  2. Lines in. Fish inside the event zone (the circle on your map). Every fish is checked when it's hooked: inside the zone, during the event, under the event's rules. The catch card tells you straight away whether it counts, and why not. Once you're signed up, your standings are top left (switch them off on the tournament board); the final results stay there for 45 seconds after the event. Players who aren't signed up only get a short banner when sign-up opens - the standings, the zone on the map and the rest of the news are for entrants.
  3. Lines out. Bring your fish to the scale. On a boat, dock at the weigh-in: your livewell comes to the scale with you. Check in late and it costs weight each minute; too late is a DQ.
  4. The weigh-in. You walk up with the weigh bag, set it in the scale's basket and the numbers climb on the readout, on the big board and on your screen.
  5. Results. Prize money, XP, a gold / silver / bronze trophy (engraved), the Champion title in the journal, the hall of fame, and the Champion's Gold rod on an angler's first title.
Format How it's won
Big Fish Derby The heaviest single fish. Weigh in any time.
Bass tournament Your best 5 fish by total weight, kept alive in the livewell. Catch a sixth and the smallest is culled (released) automatically. Fish in your pockets at the scale are dead fish: each costs a penalty. One check-in (it ends your day), and weighed fish are released.
Species hunt The biggest of one species.
Slam One of each listed species: the most species wins, their total weight breaks ties.
Catch & release Each fish is measured when you let it go (its length from its weight); your 5 longest. Kept fish don't count, there's no weigh-in.
Tagged fish bounty A few fish out there carry a numbered tag, each worth a share of the pool to whoever brings it to the scale. Let one go and it's back in the water for someone else. The rest of the pool goes to the heaviest fish.
Team / boat event Crews of up to 3 pool their catch: the team's best 5. One member checks the whole team in.

Rules per event: lures only, no trolling, bank only, boats only, a boat class (only these boats), a size limit, the species that count.

Staff tools. Staff (the command.dctourney ace, admins by default) get a Staff tab on the tournament board (/tourney, or /dctourney editor): - Make their own events: a name, the format, the rules, the species that count, entry fee and added purse, sign-up and fishing time, and the zone - centred where they stand or on their map waypoint, the radius on a slider, shown on their map while they set it. Put it in the rotation, give it a daily time (and days), or just start it. - Start any event now, and run the one that's on: lines in now, lines out now, post the results, cancel and refund. - Put up a weigh-in station anywhere: stand where the weighmaster should stand, facing the crowd, and place it - the whole stage goes up around that spot for everyone, and events can use it. Stations of theirs can be deleted again (once no event uses them).

It's all saved on the server (the resource's KVP) - nothing to edit in the config.

Events start on a schedule (fixed times on the server clock, e.g. the Saturday night Bass Classic) and on a rotation through all of them every couple of hours, or by an admin. Everything is in config/tournaments.lua: the stations (every prop's place is an offset from the weighmaster, so the set can be moved or rearranged), the zones, the events, the times, the payout split, the prizes and the penalties. Results and titles are saved in the deepcatch_tourney_results table (created automatically); a winner who's offline gets their prize when they next log in. A resource restart during an event refunds the entry fees.

Gear

Gear What it does Used
Rod Cast distance, strike window, power, luck. Offshore rods fight deep-sea fish. The rod you use
Reel Retrieve speed and drag Comes fitted on every rod, its own model (matchReel in config/gear.lua; the Creekside rod has the stock reel). Reels aren't sold and can't be swapped.
Line Strength. Fish heavier than the line's rating fight much harder. Best line in your inventory, automatically
Bait Targets specific species. Used up on every hook. Picked in the tackle box
Lures Target specific species. Reusable, but lost when your line snaps. Picked in the tackle box

Every bait and lure has targets in config/gear.lua. For example, largemouth_bass = 4 makes bass four times more likely. Using a bait in the wrong water slows bites and cancels its targeting.

Config files

File What's in it
config/config.lua Framework, inventory, target, units (imperial or metric), UI position and size, keys, minigame, leveling, rarities
config/fish.lua Species: rarity, water, weight, price, time of day, weather, zone, and how they're drawn
config/gear.lua Rods (and the reel each comes with), line, bait and lures (stats, prices, levels, targets, artwork), the tackle box, the Starter Kit
config/zones.lua Named zones for zone-only fish and luck bonuses
config/shops.lua Store and marina locations, NPCs, blips, boat spawn points, which sections each store sells, market prices, taxidermy (mounted fish)
config/boats.lua Boats (and their rod holders), fish finders, fish schools, marina settings (keys, fuel, auto-anchor)
config/trolling.lua Trolling: strike timing, speed windows, cruise limits, rod holder placement, trolling rigs
config/bankrods.lua Bank rod holders: how many rods and holders, who can grab, the strike window, the holders themselves
config/tournaments.lua Tournaments: the weigh-in stations and their props, the event zones, the events and formats, the schedule and rotation, fees, payouts, prizes, penalties
config/server.lua Discord webhook for catch and anti-cheat logs (server only)
locales/en.lua Every string in the script and the UI

After adding fish or gear, run deepcatch_items in the server console to regenerate the files in install/.

Commands

Command Who What
/fishlog Everyone Opens the fishing journal
/fishfinder (K) Everyone Shows or hides the fish finder while on a boat
/tacklebox (G) Everyone Sets your tackle box down in front of you (third-eye it to open it)
/trolling (J) Everyone Opens the trolling panel while on a DeepCatch boat. Its Display switches show or hide the fish finder, the trolling motor panel and the fishing info card, saved per player
/trollmotor (Y) Everyone Deploys or stows the bow trolling motor, standing at the bow of a boat that has one
/tourney Everyone Opens the tournament board: the event on now, the standings, your catch, what's coming up, the hall of fame (sign up and weigh in at the station)
/dctourney start <event> [sign-up min] [fishing min] Admins Opens sign-up for an event now. Also now (lines in now), end (lines out now), finish (post the results), stop (cancel and refund), list, editor (the Staff tab)
/deepcatch_kit Admins Gives a starter rod and worms
deepcatch_items Server console Rebuilds the item files in install/
/dc_coords Debug mode only Copies your position as a vec4 for shop NPCs

Exports

-- client
exports.deepcatch:useRod('fishing_rod_pro')
exports.deepcatch:isFishing()
exports.deepcatch:stopFishing()
exports.deepcatch:OpenJournal()
exports.deepcatch:openTourney()

Anti-cheat

The server decides everything. It checks rod and bait ownership, cast distance and zone, and strike timing. It rolls the catch itself, and rejects any reel that finished faster than physically possible. Suspicious attempts are printed to the console and sent to the webhook if you set one.

Customizing the UI

Open web/index.html in a normal browser to get a preview panel. It lets you click through every screen with mock data: HUD, tackle box, minigame, catch cards, store and journal.