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.
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
/poggysettings hub. - The Fishing Journal: an illustrated book with a map of every water, fish lore, and each character's discoveries and best weights.
Requirements#
| Resource | Needed by | Why |
|---|---|---|
| poggy_core 0.13.0 or newer | both | The framework layer: items, character, notifications. Version 0.23.0 or newer lets the screens follow your Poggy theme. |
| poggy_skillcheck | Poggy Fishing | The skillcheck circle used in every fight. Required: Poggy Fishing will not start without it. |
| oxmysql | both | Database. |
| poggy_fishing | the journal | The 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#
- Make sure
poggy_core,poggy_skillcheckandoxmysqlare installed and started. - Put the
poggy_fishingfolder in your resources folder. If you use the journal, putpoggy_fishing_journalthere too. - 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 - Copy the item pictures from each script's
docs/item_images/folder into your inventory's image folder. On VORP that isvorp_inventory/html/img/items/. - 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
| Setting | Default | What it does |
|---|---|---|
Fishing rod item Config.FishingRodItem | fishingrod | The item that equips the normal rod. |
Pro Rod item Config.ProRodItem | fishingrod_pro | The item that equips the Pro Rod. |
Hide fish not yet caught Config.HideUndiscoveredFish | true | The 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.ActivePercent | 80 | The 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
| Setting | Default | What it does |
|---|---|---|
Wait before a bite Config.BiteTimeMin / BiteTimeMax | 3 / 20 seconds | Normal rod: how long after the cast the tug game starts. |
Slowest / fastest needle speed Config.SkillCheck.SpeedMin / SpeedMax | 3 / 5 | The needle speed is kept between these. |
Misses before the line breaks Config.SkillCheck.MaxFails | 4 | Normal rod only. The Pro Rod snaps on tension instead. |
Speed-up per miss in a row Config.SkillCheck.MissSpeedBump | 1 | Each miss in a row makes the needle this much faster. |
Starting interest Config.Interest.InitialInterest | 20 | Where the blue interest bar starts in the tug game. |
Interest per tap Config.Interest.GainPerPress | 4 | How much each tap of E raises interest. Raise it for fewer taps. |
Bait bonus / right-bait bonus per tap BaitBonus / RightBaitBonus | 2 / 3.33 | Extra interest per tap with bait on, and more again when the bait targets a fish in that water. |
Interest lost per second Config.Interest.InterestDecay | 1.33 | How fast interest falls when the player stops tapping. |
Tension per tap Config.Interest.TensionPerPress | 3.33 | How much each tap raises the red tension bar. At 100 the line snaps. |
Tension lost per second Config.Interest.TensionDecay | 4 | How fast tension falls between taps. |
Grace period Config.Interest.GracePeriod | 5000 ms | Time at the start of the tug game before the fish can lose interest. |
Boredom timeout Config.Interest.BoreTimeout | 5000 ms | How long the fish waits for a tap before leaving. |
Tap cooldown Config.Interest.PressCooldown | 150 ms | The 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:
| Price | Tier | Needle speed | Zone difficulty | Progress per good / great hit | Progress lost per miss |
|---|---|---|---|---|---|
| under $1 | Easy | 3 | 1 | 28 / 38 | 12 |
| $1 to $2.99 | Medium | 3 | 2 | 18 / 26 | 8 |
| $3 to $5.99 | Hard | 4 | 3 | 16 / 23 | 6 |
| $6 to $19.99 | Expert | 4 | 4 | 12 / 18 | 5 |
| $20 or more | Legendary | 5 | 5 | 12 / 17 | 6 |
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
| Setting | Default | What it does |
|---|---|---|
Good / great hit progress × GoodMult / GreatMult | 0.65 / 0.75 | Each hit gives this share of the normal progress, so Pro Rod fights are longer. |
Miss penalty × MissMult | 1.5 | Misses take 50% more progress. |
Fish size odds SizeWeights | small 0.4, medium 0.8, large 2, extra large 3, legendary 4 | Multiplies the bait's odds per fish size, so the Pro Rod finds bigger fish. |
Wait before a bite BiteTimeMin / BiteTimeMax | 4 / 15 seconds | The Pro Rod has no tug game: a fish simply bites after this wait. |
Progress drain DrainRate | 0.7 per second | How fast the fish pulls line back during the fight. Lower it for easier fights. |
Extra drain on a miss DrainOnMiss | 6 | Progress lost at once on a missed skillcheck. |
Pull change: soonest / latest PullSwitchMin / PullSwitchMax | 3 / 6 seconds | How often the fish changes direction. |
Mouse sensitivity MouseSensitivity | 180 | How twitchy the pull needle feels. |
Tension gain when wrong TensionWrongRate | 20 per second | Tension added while the player pulls the wrong way. At 100 the line snaps. |
Tension spike on a miss / relief on a hit TensionOnMiss / TensionReliefOnHit | 15 / 10 | Tension added by a miss, and taken away by a hit. |
Roll loot twice LootDropExtraRoll | true | Each kept fish rolls the loot table twice. |
Bait loss × BaitLoseChanceMult | 0.5 | Halves 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) | Bonus | Targets | Lose chance |
|---|---|---|---|
Spinner Lure (V4) p_lgoc_spinner_v4 | 0 | anything, mostly small and medium fish | 20% |
Worm Bait bait_worm | 1 | bluegill, bullhead, perch, largemouth and smallmouth bass | 75% |
Cricket Bait bait_cricket | 1 | chain and redfin pickerel, rock bass, medium rainbow trout, medium sockeye | 70% |
Bread Bait bait_bread | 0 | small bluegill and perch, medium bluegill and perch, small rock bass, small bullhead | 80% |
Crawdad Bait bait_crawdad | 2 | longnose gar, northern pike | 60% |
Legendary Dragon Fly Lure p_finishedragonflylegendary01x | 2 | pike, gar, sockeye, large bass, and the four legendary fish | 5% |
- 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 fish | Water | Hours |
|---|---|---|
| Lake Sturgeon | Flat Iron Lake | 8 PM to 11 PM |
| Rainbow Trout | O'Creagh's Run | 5 AM to 9 AM |
| Muskellunge | Owanjila | 4 AM to 7 AM |
| Channel Catfish | Bayou Nwa | 10 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.
| Item | Weight |
|---|---|
bait_crawdad | 25 |
| White Pearl | 10 |
| Red Pearl | 6.5 |
| Blue Pearl | 4.5 |
| Golden Nugget (listed twice) | 2 + 2 |
| Gold Pearl | 2 |
| Legendary Dragon Fly Lure | 1 |
| Black Pearl | 0.5 |
| Uncut Diamond | 0.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
| Setting | Default | What 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.Sounds | per sound | The volume of each sound (cast, bite, catch, line snap and more) and of each music track. |
Music tracks Config.MusicTracks | Off, Peaceful Waters, Serene Lakes, Circle of Stones, Mountain Banjo | The 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
| Setting | Default | What it does |
|---|---|---|
Debug output Config.Debug | false | Prints lines about catches, bait and the fight. Leave it off on a live server. |
State audit output Config.DebugState | false | Prints every step of the fishing state to the F8 console. For reporting bugs. |
Commands#
| Command | Who | What it does |
|---|---|---|
/rerollseasons | ACE 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
| Key | What it does |
|---|---|
| Use the rod item | Equip the rod (the inventory closes) |
| Left mouse | Cast |
| E | Tug the line (normal rod, before the bite) |
| G | Open the bait menu |
| D | Next music track |
| Backspace | Stow the rod |
| Mouse | Counter the fish's pull (Pro Rod fight) |
| E / Backspace after a catch | Keep the fish / throw it back |
| Use a bait item | Put 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
- 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.
- Bait (optional). Press G and pick a bait you carry, or use a bait item from the inventory.
- Cast. Stand close to the water and press Left mouse. Nearby players see the splash.
- 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.
- 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.
- 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 rod | Pro Rod | |
|---|---|---|
| Before the bite | Tug game | Random wait |
| Fight | Skillchecks | Skillchecks and a mouse pull fight |
| Progress per hit | Full | 65% for good, 75% for great |
| Miss penalty | Normal | 50% more |
| Bigger fish | Normal odds | Much more likely |
| Loot rolls | 1 | 2 |
| Bait loss when a fish escapes | Normal | Halved |
| Line snaps on | 4 misses | Tension 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.
| Setting | Default | What it does |
|---|---|---|
Journal item JournalConfig.JournalItem | fishing_journal_fn | The item that opens the journal. Catches are only recorded while the player carries it. |
Opening animation JournalConfig.OpenAnim | WORLD_HUMAN_WRITE_NOTEBOOK, delay 2000 ms | The scenario played while reading, and how long it plays before the book appears. A delay of 0 opens it at once. |
Map picture JournalConfig.Map | img/map.jpg, 3988 × 2637 | The map page and the world area it covers. Only change these if you swap in your own map picture. |
Fish in the journal JournalConfig.Fish | the 28 fish | Each fish's name, size group, price shown, weight range, hours, species (which lore page opens) and item (its picture). |
Size group names JournalConfig.SizeLabels | Small, Medium, Large, Extra Large, Legendary | Headings in the journal's sidebar. |
Map pin colours JournalConfig.TypeColours | one colour per water type | The 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 journal | Must 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. |
| Name | The fish's name, so players see one name. |
| Item | The fish's item, so the picture matches. |
| Active hours | The 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:
| Export | Returns |
|---|---|
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.