Before You Begin#
Before installing Fishing Job, make sure your server meets the minimum requirements. Three resources are mandatory plus your framework; everything else is optional and detected on its own.
Requirement | Status | Notes |
|---|---|---|
| Required | Database access. The tables create themselves on first start. |
| Required | Callbacks, shared helpers and the cron that runs scheduled tournaments. |
| Required | Ships in the same download. Streams the bobber, the three trawl nets, the speargun and spear, the skewers and the grill boat. |
Framework | Required | ESX, QBCore or Qbox — auto-detected. Money, items, jobs and character names come from it. |
Inventory | Optional |
|
Target | Optional |
|
Vehicle keys | Optional | Hands the player the keys of the boat they rent. Eleven key scripts are supported. |
| Optional | Supplies the wood that lights a campfire. Any item you name in the config works instead. |
| Optional | The speargun shot and the grill sizzle, heard by players nearby. |
| Optional | Styled 3D prompts, and mission payouts paid into the fisher company account. |
Everything framework- or third-party-specific sits behind a small, unencrypted bridge file, and the resource picks the right one by looking at what is already running:
Layer | Detection order |
|---|---|
Framework |
|
Inventory metadata |
|
Vehicle keys |
|
Target | Chosen in the config: |
Every optional integration degrades silently. If a resource is missing, that feature simply stands down — nothing errors. Integrations has the details and how to wire in one that is not on the list.
github.comReleases · overextended/oxmysqlMySQL resource for FXServer.github.comReleases · overextended/ox_libA FiveM resource and script library for Lua and JS.Downloading Fishing Job#
After purchasing Fishing Job, the resource is automatically linked to your CFX Portal account.
Sign in to the CFX Portal using the same account used during checkout, open Granted Assets, and download Fishing Job.
After extracting the download, you should have the following folders:
[fishing]/
├── qs-fishingjob/ -- the job itself
│ ├── config/ -- config.lua, translations.lua (what you may edit)
│ ├── client/framework/ -- ESX and QBCore/Qbox bridges (editable)
│ ├── client/vehiclekeys/ -- one file per key script (editable)
│ ├── client/clothing.lua -- the fisher outfit (editable)
│ ├── server/framework/ -- money, items, jobs (editable)
│ ├── server/missions.lua -- the mission hooks (editable)
│ ├── items.lua -- items for qb-core
│ ├── items_ox.lua -- items for ox_inventory
│ ├── items_qs.lua -- items for qs-inventory
│ ├── items(ESX).sql -- items for ESX
│ └── web/ -- the interface and the item images
├── qs-fishing-props/ -- the streamed props
├── [items]/ -- a copy of the four item files
└── [sql]/ -- the optional SQL fileThe folder must be named
qs-fishingjob. The ox_inventory item exports (qs-fishingjob.toggleFishingRod), the network events and every export are called by that name, so a renamed copy leaves the rods unusable.
Installing the Resource#
Move the qs-fishingjob and qs-fishing-props folders into your server's resources directory. They can live anywhere inside it, including a category folder:
resources/
└── [qs]/
├── qs-fishing-props/
└── qs-fishingjob/Once copied, open your server.cfg and make sure every dependency — and everything it should detect — starts before Fishing Job:
ensure oxmysql
ensure ox_lib
# Framework
ensure qb-core
# ensure qbx_core
# ensure es_extended
# Target, inventory, keys, sound
ensure ox_target
ensure ox_inventory
ensure qs-vehiclekeys
ensure xsound
ensure qs-fishing-props
ensure qs-fishingjobThe loading order matters. Detection only sees resources that are already started, so an inventory or key script that starts after Fishing Job is not found and that part falls back to its basic behaviour.
Adding the Items#
Fishing Job uses 74 items: five rods, the fishing kit, nine baits, ten rod attachments, every fish and crab, the crab trap, three nets, the speargun with its spears and dive tank, three skewers, the grill boat and three kinds of wood. Add them to the inventory you run — only one of these:
Copy the entries from items_ox.lua into ox_inventory/data/items.lua, and the images from qs-fishingjob/web/public/images/ into ox_inventory/web/images/. Restart both.
Keep the client.export lines: ox dispatches usable items itself, so those lines are what make a rod, the kit or a net usable. Every fish keeps the weight it was caught at, and the shop lists each one separately and pays more for the heavy ones.
Copy the entries from items_qs.lua into qs-inventory/shared/items.lua, and the images from qs-fishingjob/web/public/images/ into qs-inventory/html/images/. Restart both. Like the ox file, the entries carry client.export lines — keep them. Each fish carries its weight on the item; the shop pays the species price.
Copy the entries from items.lua into qb-core/shared/items.lua, and the images into qb-inventory/html/images/. Copy each entry whole — an entry missing name, type, image, unique or shouldClose reaches the bag as an empty slot.
ESX reads its items from the database. Import items(ESX).sql once — it uses INSERT IGNORE, so importing it again is safe, and the three wood items shared with qs-lumberjack are left as that script created them. Copy the images into your inventory's image folder.
Nothing else to register: the script makes the rods, the kit, the trap, the nets, the speargun, the tank, the wood, the skewers and the grill boat usable on its own.
The Database#
There is no SQL file you have to import. Fishing Job creates its own tables on first start, adds any column an older version was missing, and matches its identifier columns to your framework's collation so the leaderboard never fails with Illegal mix of collations.
Tables | Hold |
|---|---|
| Each player's level and experience, plus the daily, season and all-time counters behind the leaderboard. |
| Leaderboard prizes waiting to be collected, and the last winners of each ranking. |
| Per player and per species: how many caught and released, the heaviest, and the trophies. |
| Unlocked and claimed achievements, and tournament wins. |
| Every crab trap in the water, so a soaking trap survives a restart. |
| Every setting changed from the admin panel, who changed it and when. |
On ESX the
fisherjob and its first grade are written intojobsandjob_gradesautomatically, for every job listed inConfig.FisherJob.qs-fisher.sqldoes the same by hand, for a database user that cannot create tables.
Claiming Admin Access#
The admin panel edits every setting and opens tournaments and golden zones, so it is behind an ACE permission, checked on the server when the panel opens and again on every button inside it. The permission is command.fishing on purpose: nearly every server.cfg already grants admins the whole command space, so an existing admin usually has access with nothing to add.
If yours does not, add this line:
add_ace group.admin command.fishing allowThen open the panel in game with /fisheradmin. Both the ACE and the command name can be changed in Config.AdminPanel.
Configuring the Resource#
Every setting lives in config/config.lua, and every one of them can also be changed from the admin panel in game. The file holds the defaults; anything saved from the panel is stored in the database and laid over it.
File | Contents |
|---|---|
| The job, the NPC, the fish table, depth, bait, boats, tournaments, golden zones, traps, nets, the speargun, cooking, levels, missions, the shop, the minigame and the leaderboard. |
| The language, and every line of text in eight languages. |
| The help text the admin panel shows beside each setting. No need to edit it. |
| The fisher outfit put on when a player goes on duty. |
| How money, items, jobs and names are read from your framework. |
The values worth reviewing first:
Config.Language = 'en' -- en · it · es · fr · pt · de · ru · tr (config/translations.lua)
Config.RequireJob = false -- true: only jobs in Config.FisherJob may fish
Config.FisherJob = { ['fisher'] = true }
Config.Target = false -- true: third-eye on the NPC
Config.TargetScript = 'ox' -- 'ox' or 'qb'
Config.Clothing = true -- swap into the fisher outfit on duty
Config.WeightUnit = 'kg' -- 'kg' or 'lb', display only
Config.MissionPayout = 'members' -- 'members' or 'split'
Config.AdminPanel = { Enabled = true, Ace = 'command.fishing', ConfigCommand = 'fisheradmin' }A setting saved from the panel wins over the file. If you edit
config.luaand nothing changes, that setting was overridden in the panel — reset it there (the arrow beside it) and the file's value comes back on the next restart.
Verifying the Installation#
After completing the installation, restart your server and read the boot line in the console. It says what was detected for each layer:
[qs-fishingjob] framework qb · inventory ox · vehicle keys qs-vehiclekeysstandalone means no framework was found, basic means fish sell at flat prices, and none means rented boats come without keys — if you do have that resource, move it above ensure qs-fishingjob.
Then join your server and work through the first loop:
Visit the fisherman
Old Pete stands on the coast near Paleto, under the Fisher blip. Walk up and press
E: the job panel opens with missions, your crew, statistics and the shop.Buy a rod and cast
Buy a Wooden Rod and some earthworms in the shop, use the rod from your inventory and face the water. Press
Ewhen the prompt lights up, hold the left mouse button to charge the cast and release. When the float goes under, pressEto strike.Open the admin panel
/fisheradminopens on the Events tab — start a tournament or a golden zone to see one straight away. From there, Usage covers everything a player can do.
Settings saved from the panel apply on the next restart of
qs-fishingjob, not instantly — the panel shows a banner until you do. Swapping the fish table under somebody who is reeling one in is not a settings change, so the script never does it live.



