Skip to main content

BenzyFishing — Integrations

How BenzyFishing pays out (through BenzyBridge) and, optionally, physical fish items via an inventory script.

Contents

Selling (money)

Selling pays the player through BenzyBridge — whatever money system the bridge resolves is what pays. Just pick the account it pays into:

Config.Selling.Account = 'cash' -- or 'bank'

Optionally set Config.Selling.PayFrom to an account key to deduct the payout from that account (a money sink) — best-effort, and only when the money system has such accounts (e.g. BenzyMoney's society/business accounts).

With no money system resolved by the bridge, a sale is refused (the payout comes back unsupported), the player keeps their catch, and nothing is created. Fishing itself still works — only the payout needs a money provider.

Challenge rewards (money)

Challenges (Config.Challenges) can pay a set amount for finishing one. It goes through BenzyBridge exactly like selling does, so whatever money system the bridge resolves is what pays:

Config.Challenges.Reward = {
Daily = 500, -- 0 = no reward for that period
Weekly = 2500,
Account = 'bank', -- 'cash' | 'bank'
}

Unlike a sale, a reward never blocks anything. With no money system running — or if the payment is declined for any reason — the amount is simply skipped, the challenge still completes, it still counts toward the leaderboard, and the player just gets the plain "challenge complete" message with no error. That makes it safe to leave a reward configured on a standalone server; it starts paying the moment a money system is present.

The exact amount paid (0 when it was skipped) is on the BenzyFishing:ChallengeComplete event, so another resource can log it or stack a reward of its own — see the Events documentation.

Sell-spot interaction

The world sell-spot's interaction style is Config.Interaction:

Config.Interaction = 'drawtext' -- 'drawtext' | 'target'
  • 'drawtext' — an on-screen "[E] Sell" prompt. Works standalone, nothing extra needed.
  • 'target' — the fishmonger ped gets a target interaction through BenzyBridge. If no targeting system is running, BenzyBridge warns once and the sell-spot falls back to the draw-text prompt automatically — so 'target' is always safe to set.

The /sellfish command is independent of this and always works when enabled.

Inventory (optional physical fish)

Off by default — caught fish are tracked as database counts, fully standalone. Turn the feature on to also give real items on catch and sell from the inventory:

Config.Inventory.Enabled = true
Config.Inventory.ItemPrefix = 'fish_' -- item name = prefix + species Name (e.g. fish_tuna)

With an inventory running (BenzyBridge auto-detects ox_inventory / qb-inventory / qs-inventory), every catch also grants the matching item, and /sellfish + the sell-spot remove those items and pay for them. You register the items in your inventory yourself — a definition and an image for each fish. If an item isn't registered, BenzyFishing prints a one-time console warning naming it and that catch falls back to a database count (no items are lost).

Ready-made icons for every fish ship in this resource's item_images/ folder (each named to match its item, e.g. fish_tuna.png) — copy them across in step 2.

1 — Register the items

ox_inventory — add to ox_inventory/data/items.lua:

['fish_anchovy'] = { label = 'Anchovy', weight = 200 },
['fish_mackerel'] = { label = 'Mackerel', weight = 400 },
['fish_sea_bass'] = { label = 'Sea Bass', weight = 900 },
['fish_salmon'] = { label = 'Salmon', weight = 1500 },
['fish_tuna'] = { label = 'Bluefin Tuna', weight = 5000 },
['fish_great_white'] = { label = 'Great White', weight = 20000 },
['fish_old_boot'] = { label = 'Old Boot', weight = 1000 }, -- only with SkipJunk = false

qb-inventory — add to qb-core/shared/items.lua:

['fish_anchovy'] = { name = 'fish_anchovy', label = 'Anchovy', weight = 200, type = 'item', image = 'fish_anchovy.png', unique = false, useable = false, shouldClose = true, description = 'A fresh catch.' },
['fish_mackerel'] = { name = 'fish_mackerel', label = 'Mackerel', weight = 400, type = 'item', image = 'fish_mackerel.png', unique = false, useable = false, shouldClose = true, description = 'A fresh catch.' },
['fish_sea_bass'] = { name = 'fish_sea_bass', label = 'Sea Bass', weight = 900, type = 'item', image = 'fish_sea_bass.png', unique = false, useable = false, shouldClose = true, description = 'A fresh catch.' },
['fish_salmon'] = { name = 'fish_salmon', label = 'Salmon', weight = 1500, type = 'item', image = 'fish_salmon.png', unique = false, useable = false, shouldClose = true, description = 'A fresh catch.' },
['fish_tuna'] = { name = 'fish_tuna', label = 'Bluefin Tuna', weight = 5000, type = 'item', image = 'fish_tuna.png', unique = false, useable = false, shouldClose = true, description = 'A fresh catch.' },
['fish_great_white'] = { name = 'fish_great_white', label = 'Great White', weight = 20000, type = 'item', image = 'fish_great_white.png', unique = false, useable = false, shouldClose = true, description = 'A fresh catch.' },
['fish_old_boot'] = { name = 'fish_old_boot', label = 'Old Boot', weight = 1000, type = 'item', image = 'fish_old_boot.png', unique = false, useable = false, shouldClose = true, description = 'Someone lost this.' }, -- only with SkipJunk = false

qs-inventory — add the same block as qb-inventory above to qs-inventory/shared/items.lua (qs-inventory uses the qb item format).

2 — Add the images

Copy the PNGs from this resource's item_images/ folder into your inventory's image folder — they're already named to match each item:

InventoryImage folder
ox_inventoryox_inventory/web/images/
qb-inventoryqb-inventory/html/images/
qs-inventoryqs-inventory/html/images/

Without an image the item still works — it just shows a blank slot.

Junk (fish_old_boot) isn't given while Config.Inventory.SkipJunk = true (the default), so it's only needed if you set that to false. Either way every catch is recorded in the stats, and selling still works from the database counts when items are off.