All documentation

Paid scripts

Poggy Fishing

Rod fishing for RedM: cast, tug the line to hook a fish, then win a skillcheck fight to land it. Comes with a Fishing Journal item that maps every water and records each character's catches and personal bests.

  • poggy_fishingv1.3.3
  • poggy_fishing_journalv1.2.3
  • FrameworksVORP Core, RSG Core, QBCore RedM
  • Updated5 Oct 2026

Overview#

Poggy Fishing gives your players a real fishing game. They equip a rod, cast into the water, tug the line until a fish takes the hook, then fight it with skillchecks. A landed fish can be kept or thrown back. Every kept fish also rolls for bonus loot, like pearls or gold.

Which fish bite depends on the water, the time of day, the bait and the season. The season changes at every restart, so the catch is never quite the same.

  • 28 fish across 34 waters: lakes, rivers, the bayou, creeks, ponds and the sea.
  • Four legendary fish, each in its own water and its own short time window.
  • Six baits and lures that change what bites and how hard the fight is.
  • Two rods: the normal rod with a tug game, and the Pro Rod with a mouse-driven pull fight.
  • Random seasons: by default 80% of the fish are in season after each restart.
  • A full HUD with sounds, four music tracks and two looks (brass or default).
  • Every setting can be changed in game from the /poggy settings hub.
  • The Fishing Journal: an illustrated book with a map of every water, fish lore, and each character's discoveries and best weights.

Requirements#

ResourceNeeded byWhy
poggy_core 0.13.0 or newerbothThe framework layer: items, character, notifications. Version 0.23.0 or newer lets the screens follow your Poggy theme.
poggy_skillcheckPoggy FishingThe skillcheck circle used in every fight. Required: Poggy Fishing will not start without it.
oxmysqlbothDatabase.
poggy_fishingthe journalThe journal reads the waters, the fish and the seasons from it, and records the catches it sends.

Works on VORP, RSG and QBR (QBCore RedM). RedM only.

The journal is optional. Poggy Fishing runs without it, but see Hide fish not yet caught under Configuration.

Installation#

  1. Make sure poggy_core, poggy_skillcheck and oxmysql are installed and started.
  2. Put the poggy_fishing folder in your resources folder. If you use the journal, put poggy_fishing_journal there too.
  3. Add them to server.cfg, after their requirements, with the journal last:
    ensure oxmysql
    ensure poggy_core
    ensure poggy_skillcheck
    ensure poggy_fishing
    ensure poggy_fishing_journal
  4. Copy the item pictures from each script's docs/item_images/ folder into your inventory's image folder. On VORP that is vorp_inventory/html/img/items/.
  5. Restart the server.

On VORP there is nothing to import. Each script adds its items to the database by itself when it starts, and the journal also creates its own table. Items you already have are never changed.

RSG: RSG has no item table in the database, so add the items to rsg-core/shared/items.lua by hand. Each script prints one yellow line in the server console at start naming any item that is still missing.

The items to add on RSG:

  • Rods: fishingrod, fishingrod_pro
  • Baits and lures: bait_worm, bait_cricket, bait_bread, bait_crawdad, p_lgoc_spinner_v4, p_finishedragonflylegendary01x
  • Every fish item from the fish list (the names starting a_c_fish)
  • Loot: whitepearl, redpearl, bluepearl, goldpearl, blackpearl, golden_nugget, diamond_uncut
  • The journal: fishing_journal_fn

Rods, baits and the journal must be usable items. Give players rods, bait and the journal your own way: a shop, a starter kit or an admin give.

Configuration#

Every setting can be changed in game: type /poggy, pick Poggy Fishing (or Poggy Fishing Journal), change what you need and save. Then restart the script. You can also edit each script's config.lua by hand.

The fishing hub has these tabs: General, Baits & fish, The bite & fight, Difficulty tiers, Pro Rod, Appearance and Advanced. It also has two guides: Tuning baits and what bites and Making fishing easier or harder. Some settings are only shown under Show advanced.

General

SettingDefaultWhat it does
Fishing rod item Config.FishingRodItemfishingrodThe item that equips the normal rod.
Pro Rod item Config.ProRodItemfishingrod_proThe item that equips the Pro Rod.
Hide fish not yet caught Config.HideUndiscoveredFishtrueThe HUD only shows a fish's picture after the player has caught it in that water. Discoveries are saved by the Fishing Journal, so this needs the journal. Turn it off if you do not run the journal.
Fish in season Config.Season.ActivePercent80The share of fish, picked at random at every start, that can be caught. Set it to 100 to keep every fish in season.

The bite and the fight

SettingDefaultWhat it does
Wait before a bite Config.BiteTimeMin / BiteTimeMax3 / 20 secondsNormal rod: how long after the cast the tug game starts.
Slowest / fastest needle speed Config.SkillCheck.SpeedMin / SpeedMax3 / 5The needle speed is kept between these.
Misses before the line breaks Config.SkillCheck.MaxFails4Normal rod only. The Pro Rod snaps on tension instead.
Speed-up per miss in a row Config.SkillCheck.MissSpeedBump1Each miss in a row makes the needle this much faster.
Starting interest Config.Interest.InitialInterest20Where the blue interest bar starts in the tug game.
Interest per tap Config.Interest.GainPerPress4How much each tap of E raises interest. Raise it for fewer taps.
Bait bonus / right-bait bonus per tap BaitBonus / RightBaitBonus2 / 3.33Extra interest per tap with bait on, and more again when the bait targets a fish in that water.
Interest lost per second Config.Interest.InterestDecay1.33How fast interest falls when the player stops tapping.
Tension per tap Config.Interest.TensionPerPress3.33How much each tap raises the red tension bar. At 100 the line snaps.
Tension lost per second Config.Interest.TensionDecay4How fast tension falls between taps.
Grace period Config.Interest.GracePeriod5000 msTime at the start of the tug game before the fish can lose interest.
Boredom timeout Config.Interest.BoreTimeout5000 msHow long the fish waits for a tap before leaving.
Tap cooldown Config.Interest.PressCooldown150 msThe shortest time between two taps that count.

Fishing with no bait uses its own multipliers on these values (Config.Interest.NoBait, under Show advanced). By default interest rises much more slowly, and taps give extra interest while the line is between 20 and 85 tension: a risk and reward.

Difficulty tiers

A fish's price decides how hard it is:

PriceTierNeedle speedZone difficultyProgress per good / great hitProgress lost per miss
under $1Easy3128 / 3812
$1 to $2.99Medium3218 / 268
$3 to $5.99Hard4316 / 236
$6 to $19.99Expert4412 / 185
$20 or moreLegendary5512 / 176

The fish is landed when the progress bar reaches 100, so Progress per good hit sets how long a fight lasts: 12 means about nine hits. Zone difficulty 1 is a big target zone and 5 is a small one. Each tier also has Great part of the zone (how much of the zone counts as a great hit), its own tug game scaling, and the Pro Rod drain multiplier. Raising a fish's price in the fish list can move it to a harder tier.

Keep Off-centre scatter (randomizer, under Show advanced) at 2 or lower. Higher values can put a skillcheck behind the fishing HUD, where it cannot be seen or hit.

Pro Rod

SettingDefaultWhat it does
Good / great hit progress × GoodMult / GreatMult0.65 / 0.75Each hit gives this share of the normal progress, so Pro Rod fights are longer.
Miss penalty × MissMult1.5Misses take 50% more progress.
Fish size odds SizeWeightssmall 0.4, medium 0.8, large 2, extra large 3, legendary 4Multiplies the bait's odds per fish size, so the Pro Rod finds bigger fish.
Wait before a bite BiteTimeMin / BiteTimeMax4 / 15 secondsThe Pro Rod has no tug game: a fish simply bites after this wait.
Progress drain DrainRate0.7 per secondHow fast the fish pulls line back during the fight. Lower it for easier fights.
Extra drain on a miss DrainOnMiss6Progress lost at once on a missed skillcheck.
Pull change: soonest / latest PullSwitchMin / PullSwitchMax3 / 6 secondsHow often the fish changes direction.
Mouse sensitivity MouseSensitivity180How twitchy the pull needle feels.
Tension gain when wrong TensionWrongRate20 per secondTension added while the player pulls the wrong way. At 100 the line snaps.
Tension spike on a miss / relief on a hit TensionOnMiss / TensionReliefOnHit15 / 10Tension added by a miss, and taken away by a hit.
Roll loot twice LootDropExtraRolltrueEach kept fish rolls the loot table twice.
Bait loss × BaitLoseChanceMult0.5Halves the chance of losing bait when a fish gets away.

Each tier also makes the Pro Rod drain faster for bigger fish (Pro Rod drain × on the Difficulty tiers tab): easy 0.7, medium 1.0, hard 1.3, expert 1.7, legendary 2.2.

Baits and lures

On the Baits & fish tab. Each bait has a bonus, target fish, a lose chance and size weights.

Bait (item)BonusTargetsLose chance
Spinner Lure (V4) p_lgoc_spinner_v40anything, mostly small and medium fish20%
Worm Bait bait_worm1bluegill, bullhead, perch, largemouth and smallmouth bass75%
Cricket Bait bait_cricket1chain and redfin pickerel, rock bass, medium rainbow trout, medium sockeye70%
Bread Bait bait_bread0small bluegill and perch, medium bluegill and perch, small rock bass, small bullhead80%
Crawdad Bait bait_crawdad2longnose gar, northern pike60%
Legendary Dragon Fly Lure p_finishedragonflylegendary01x2pike, gar, sockeye, large bass, and the four legendary fish5%
  • Bonus makes the skillcheck zone bigger by that many levels. A bonus of 0 counts like no bait: the zone is one level smaller. A bonus of 2 also slows the needle by one.
  • Target fish are three times as likely to bite. On the normal rod, each tap also gains extra interest when a target fish lives in that water.
  • Lose chance is the chance the bait is lost when a fish gets away. A snapped line always loses it. A caught fish never uses up bait.
  • Size weights set how likely each fish size is to bite. A weight of 0 means that size never bites on this bait. A size left out counts as 1, not 0.

With no bait at all, legendary fish never bite. The Dragon Fly Lure is the only bait that targets them. The other baits do not list a legendary weight, so it counts as 1 and a legendary fish can still bite on them now and then. To make the Dragon Fly Lure the only way, give every other bait legendary = 0 in its size weights.

To add a bait: add the item to your framework first, then click Add bait in the hub, fill it in, save and restart. The new item becomes usable on its own.

Fish

Each fish has a name, item, price (which sets its tier), size, weight range and optional active hours. Many fish only bite at certain hours, for example bullhead at night (8 PM to 6 AM) and chain pickerel in the morning (5 AM to noon). The legendary fish have short windows:

Legendary fishWaterHours
Lake SturgeonFlat Iron Lake8 PM to 11 PM
Rainbow TroutO'Creagh's Run5 AM to 9 AM
MuskellungeOwanjila4 AM to 7 AM
Channel CatfishBayou Nwa10 PM to 2 AM

Northern pike live in Owanjila, Lake Isabella, the Dakota River and the Upper and Lower Montana River. Longnose gar live in Elysian Pool, the Kamassa, Lannahechee and San Luis rivers, Bayou Nwa, Arroyo de la Vibora and Bahia de la Paz.

Which fish live in which water is built into the script and cannot be edited. A new fish, or a fish id you rename, will not appear in any water. You can change everything else about a fish.

Bonus loot

Every kept fish gives one bonus item, picked by weight (two with the Pro Rod). A weight is not a percentage: an item's odds are its weight divided by the total of all weights.

ItemWeight
bait_crawdad25
White Pearl10
Red Pearl6.5
Blue Pearl4.5
Golden Nugget (listed twice)2 + 2
Gold Pearl2
Legendary Dragon Fly Lure1
Black Pearl0.5
Uncut Diamond0.5

The crawdad bait entry is labelled "Cricket Bait" in the default list, so the loot message says Cricket Bait while the item given is crawdad bait. Change its label in the list if that bothers you.

Appearance

SettingDefaultWhat it does
Interface skin Config.UI.skin"brass"The look of the HUD and bait menu. "brass" is riveted brass and gunmetal. "default" follows the Poggy theme chosen in poggy_core (0.23.0 or newer).
Sound effects Config.Soundsper soundThe volume of each sound (cast, bite, catch, line snap and more) and of each music track.
Music tracks Config.MusicTracksOff, Peaceful Waters, Serene Lakes, Circle of Stones, Mountain BanjoThe tracks players cycle through while fishing. The first entry is always Off.

To make your own skin, copy ui/skin-brass.css as ui/skin-<name>.css, change the image names in it, and set the skin to <name>. Images are optional: a missing one leaves that piece in plain colour. The image sizes are listed at the top of skin-brass.css.

Advanced

SettingDefaultWhat it does
Debug output Config.DebugfalsePrints lines about catches, bait and the fight. Leave it off on a live server.
State audit output Config.DebugStatefalsePrints every step of the fishing state to the F8 console. For reporting bugs.

Commands#

CommandWhoWhat it does
/rerollseasonsACE command.rerollseasons, or the server console (rerollseasons)Picks a new random set of in-season fish right away and sends it to every player.

The journal has no commands. Players open it by using the journal item.

Controls while fishing

KeyWhat it does
Use the rod itemEquip the rod (the inventory closes)
Left mouseCast
ETug the line (normal rod, before the bite)
GOpen the bait menu
DNext music track
BackspaceStow the rod
MouseCounter the fish's pull (Pro Rod fight)
E / Backspace after a catchKeep the fish / throw it back
Use a bait itemPut that bait on the line (rod must be equipped)

Permissions#

Fishing itself needs no permission: anyone with a rod can fish. The only restricted action is /rerollseasons. To let a group use it, add this to server.cfg:

add_ace group.admin command.rerollseasons allow

Who may change settings in /poggy is set in poggy_core. See Poggy Core.

Using it in game#

How a catch works

  1. Equip. Use the fishing rod or the Pro Rod from the inventory. The HUD opens and shows the fish of the water you are at.
  2. Bait (optional). Press G and pick a bait you carry, or use a bait item from the inventory.
  3. Cast. Stand close to the water and press Left mouse. Nearby players see the splash.
  4. Hook the fish.
    • Normal rod: after a few seconds the tug game starts. Tap E to raise interest (blue bar). Each tap also adds tension (red bar). Interest at 100 hooks the fish. Tension at 100 snaps the line. Stop tapping too long and the fish gets bored and leaves.
    • Pro Rod: there is no tug game. A fish bites after a short random wait.
  5. Fight. Hit the skillchecks to fill the progress bar. The fish is landed at 100. Misses take progress away, and at 0 the fish escapes. Misses in a row make the needle faster.
    • Normal rod: 4 misses snap the line.
    • Pro Rod: the fish also pulls left, right or forward. Move the mouse to counter it. Countering well slows the drain and eases tension. Tension at 100 snaps the line.
  6. Keep or throw back. Press E to keep the fish or Backspace to throw it back. A kept fish goes into the inventory with a bonus loot roll. The catch screen shows its weight.

Normal rod and Pro Rod

Normal rodPro Rod
Before the biteTug gameRandom wait
FightSkillchecksSkillchecks and a mouse pull fight
Progress per hitFull65% for good, 75% for great
Miss penaltyNormal50% more
Bigger fishNormal oddsMuch more likely
Loot rolls12
Bait loss when a fish escapesNormalHalved
Line snaps on4 missesTension 100

Why nothing bites

A fish can only bite when it lives in that water, is in season, and is inside its active hours. The bait's size weights must also allow its size. If none of the fish in a water qualifies, the player sees "Nothing seems to be biting here...". Try another bait, another time of day, or another water.

Fishing Journal#

The Fishing Journal (poggy_fishing_journal) is an inventory item that opens an illustrated book. It needs Poggy Fishing and must start after it.

What players see

  • A map of every water, with a pin for each. Click a pin to see the fish that live there and which are in season now.
  • The time of day each fish bites.
  • A lore page for every species: history, habitat, behaviour and where to find it.
  • Their own records: fish discovered, catch counts and best weights, across the Journal, Discoveries, Records and PBs tabs.

Using the item plays a notebook animation, then the book opens. Esc closes it.

A fish caught in a water for the first time shows a discovery message. Beating a personal best weight shows a gold "Personal record" message.

Catches are recorded only while the player carries the journal. A character who fishes without it gets no discoveries, counts or records for those fish.

The journal also feeds Poggy Fishing's Hide fish not yet caught setting: the fish a character has discovered in a water are the ones shown on the fishing HUD there.

Journal settings

In /poggy → Poggy Fishing Journal, or in its config.lua. Restart the journal after a change.

SettingDefaultWhat it does
Journal item JournalConfig.JournalItemfishing_journal_fnThe item that opens the journal. Catches are only recorded while the player carries it.
Opening animation JournalConfig.OpenAnimWORLD_HUMAN_WRITE_NOTEBOOK, delay 2000 msThe scenario played while reading, and how long it plays before the book appears. A delay of 0 opens it at once.
Map picture JournalConfig.Mapimg/map.jpg, 3988 × 2637The map page and the world area it covers. Only change these if you swap in your own map picture.
Fish in the journal JournalConfig.Fishthe 28 fishEach fish's name, size group, price shown, weight range, hours, species (which lore page opens) and item (its picture).
Size group names JournalConfig.SizeLabelsSmall, Medium, Large, Extra Large, LegendaryHeadings in the journal's sidebar.
Map pin colours JournalConfig.TypeColoursone colour per water typeThe pin colour for lakes, rivers, swamps, creeks, ponds and the sea.

The water pins, water descriptions and species lore are built in and cannot be edited.

Keeping the journal in step with Poggy Fishing

The journal keeps its own copy of the fish list. Poggy Fishing decides what is caught; the journal only shows and records it. When you change a fish in Poggy Fishing, change it in the journal too:

In the journalMust match in Poggy Fishing
The fish's id (the key)The same id in the Fish list. A catch whose id is not in the journal is not recorded.
NameThe fish's name, so players see one name.
ItemThe fish's item, so the picture matches.
Active hoursThe fish's hours, so the journal tells the truth.

Price shown, size group, species and the weight range are for display only. The prices in the journal's default list are not the same as Poggy Fishing's, and northern pike and longnose gar are grouped as Extra Large there; edit them if you want the two to agree.

For developers#

Poggy Fishing has two server exports, used by the journal:

ExportReturns
exports.poggy_fishing:getInSeasonFish()A table of the fish ids in season now: { [fishId] = true }.
exports.poggy_fishing:getZoneFish()Which fish live in each water: { [waterHash] = { fishId, ... } }.

The items the scripts register as usable: the two rods, every bait in the bait list, and the journal item. Fish and loot items are plain items, so any shop or butcher script can buy them.

Troubleshooting#

Nothing happens when a player uses the rod.

Check that poggy_core and poggy_skillcheck are started before poggy_fishing. If poggy_core is not ready within 30 seconds of the start, the console says the usable items were not registered; restart the script once poggy_core is running.

"Get closer to the water." or "No fish in this water."

The player must stand close to the water to cast, and the water must be one of the 34 built-in waters.

"Nothing seems to be biting here..."

No fish in this water can bite right now: wrong hour, out of season, or the bait's size weights are 0 for every fish here. Try another bait or another time. An admin can run /rerollseasons.

The HUD shows no fish pictures.

Copy docs/item_images/ into your inventory's image folder. With Hide fish not yet caught on, a fish only shows after the character has caught it in that water while carrying the journal. If you do not run the journal, turn that setting off.

A yellow line at start names missing items.

Add those items to your framework's item list (on RSG, rsg-core/shared/items.lua). Until then nobody can be given them.

"Your inventory is full!"

The player has no room for the fish, so it is not given. Loot is only rolled for a fish that lands in the inventory.

Journal catches are not recorded.

The player must carry the journal item, and the fish's id must be in the journal's fish list.

The journal shows no seasons or no fish per water.

poggy_fishing must be running. The journal reads both from it, and prints a warning in the server console when it cannot.

Updating#

Both scripts update through poggy_core's updater. Your config.lua values are kept and new settings arrive with their defaults. See Poggy Core: updates.

Item rows already in your database are never changed by an update, so your own labels and limits stay. On RSG, check the console after an update for a yellow line naming any new item to add by hand.

Join the Discord Discord