EasyFishing 2.0 (Latest)

EasyFishing 2.0!
A guide to installing “EasyFishing 2.0” onto your FiveM server!
Purchasing the resource
Firstly, you must purchase the product from either our Tebex or Discord. (We offer cheaper prices on our discord due to Tebex not taking a cut.) If you wish to make the purchase on our discord, create a ticket, and state that you wish to purchase this resource.
Tebex Store
Discord
Downloading the resource
Upon purchasing the resource, head to your Keymaster, find the resource, and click “Download”

Installing the resource
-
Drag the resource into your resources folder.
-
Ensure or start all resources in server.cfg. Example:
ensure easyfishing
Configuring the resource
We try to make our resources as easy to understand as possible, however, they can be quite confusing without an explanation. Follow along with this guide to have a full understanding of how to configure this resource!
-
Commands
FishCommand = "fish",InvCommand = "inventory",This one is pretty self-explanatory.
- “FishCommand” refers to the command that is entered to start fishing.
- “InvCommand” refers to the command entered to display the fish and bait you currently have.
-
KeyBinds
KeyBinds = {KeepFish = 44,ThrowBackFish = 48,CancelFishing = 44,ReelIn = 46,ShopAndSellInteract = 46},The control IDs for each ingame action. See FiveM Controls for a list.
- “KeepFish” keeps the fish you caught when pressed.
- “ThrowBackFish” throws back the fish you caught when pressed.
- “CancelFishing” stops fishing when pressed at any point.
- “ReelIn” is the button that you mash when catching a fish.
- “ShopAndSellInteract” is the button you press to interact with all shops and sell places.
-
Fish
Fish = {{name="NAME", model={type="TYPE", id="ID"}, clickCount=0, weight=0, pricePerKilo=0, timeToCatch=0, legality={legal=false, reason="REASON"}}},- “name” is the name of the fish
- “model” contains the model type and ID that will spawn for the fish
- this configuration supports both “ped” and “prop” types
- “clickCount” is how many times the key must be pressed to catch the fish
- “weight” is either a fixed value or {min=X, max=Y} for random weight
- “pricePerKilo” is how much the fish sells for per kg
- “timeToCatch” is how long it takes to catch the fish
- “legality” determines if the fish is legal and includes a reason if illegal
-
Weather
Weather = {all = {{name="FISH", chance=0.0},},WEATHER_TYPE = {{name="FISH", chance=0.0},}},- “all” contains fish that can be caught in any weather
- Individual weather types list fish specific to those conditions
- “chance” is the probability (0.0-1.0) of catching that fish
- Weather types can be found at This native
-
Bait
Bait = {{name="NAME", catchWaitTimeModifier=1.0, fishRarityModifier=1.0}},- “name” is the name of the bait type
- “catchWaitTimeModifier” affects how quickly fish bite (lower is faster)
- “fishRarityModifier” affects chances of rare fish (higher is better)
-
Sell Places
SellPlaces = {{name="NAME", colour=0, icon=0, pos=vector3(0,0,0)}},- “name” is the name of the sell site
- “colour” is the blip color ID
- “icon” is the blip icon ID
- “pos” is the location vector3
-
Shops
Shops = {{name="NAME", showNameInMenu=false, slogan="SLOGAN", colour=0, icon=0, customTitleTexture="URL", id="ID", pos=vector3(0,0,0)}},- “name” is the shop name
- “showNameInMenu” toggles name visibility
- “slogan” appears below the name
- “colour” and “icon” are for the blip
- “customTitleTexture” is the shop banner image
- “id” is used to assign products
- “pos” is the location
- Optional “customSubheading” can include |key| placeholder
-
Products
Products = {{name="NAME", description="DESC", price=0, shops={"SHOP_ID"}, baitType="TYPE"}},- “name” is the product name
- “description” is shown in the shop
- “price” is the cost
- “shops” lists shop IDs that sell it
- “baitType” specifies the bait type or |ROD| for fishing rod
- Optional “customMessage” for purchase notification
-
Webhook Settings
Webhook = {url="",color=11111111,img=""},The webhook sends a message to a Discord channel when a player catches a fish, sells a fish, or purchases any items. If you do not wish to use the webhook, you can just set url to
""
.- “url” is the webhook URL
- “color” is the color of the embed. You can go to this site to convert RGB to an integer.
- “img” is the image URL for the webhook
-
General Settings
MenuPos = {100,100},DistanceFromWater = 10,MaxBlipInteractDistance = 5,MaxBlipDrawDistance = 10,Currency = "£",FishBiteWaitTime = {min=10,max=30},
- “MenuPos” sets the position of the menu UI on screen (x,y coordinates)
- “DistanceFromWater” is how close a player needs to be to water to start fishing (in meters)
- “MaxBlipInteractDistance” is how close a player needs to be to interact with shop/sell blips
- “MaxBlipDrawDistance” determines how far away blips are visible on the minimap
- “Currency” sets the symbol used for prices in shops and payouts
- “FishBiteWaitTime” defines the random range (in seconds) before a fish bites
-
Custom Functions
IllegalFish = function() print("Illegal fish caught!")end,
The IllegalFish
function is called whenever a player attempts to sell fish marked as illegal in the Fish configuration. You can use this to:
- Notify law enforcement
- Apply penalties
- Track illegal fishing activity
- Return
true
to allow the sale orfalse
to prevent it
ShowNotification = function(message) ShowDefaultNotification(message)end,
The ShowNotification
function handles how notifications are displayed to players. By default, it uses GTA’s native notification system, but you can modify this to:
- Use your own notification system
- Integrate with chat messages
- Display custom UI elements
- Support different notification types/styles
-
Framework Integration
Firstly, if you’re using ESX or QBCore, you need to set the info for the fishing rod item in your config.
- For ESX
ESX = {FishingRodInfo = {id="ID", name="NAME", weight=0}},
- For QBCore
QBCore = {FishingRodInfo = {id="ID", name="NAME", weight=0}},
Then you must define the framework intergration you wish to use. This is done by setting the “Framework” variable to the name of the intergration in the intergrations table. You have a few default options:
- “ESX” for the built-in ESX intergration
- “QBCore” for the built-in QBCore intergration
- “None” for no intergration
- “Custom” for the user-editable configuration template in the intergration.lua file in your config folder.
Config = { ... Framework = "ESX",}
Your config should now look something like this:
Config = { ... ESX = { FishingRodInfo = {id="fishingrod", name="Fishing Rod", weight=0} }, Framework = "ESX",}
Integrating your own framework
If you wish to use your own framework instead of the built-in ESX or QBCore integrations, you can use our custom framework integration template. This allows you to define your own functions for interacting with your framework’s inventory and money systems.
-
Custom Inventory System
UseCustomInventory = false,
Set this to true
to use your own inventory system functions instead of the default ones. When enabled, you’ll need to implement all inventory-related functions below.
-
Fishing Rod Management
CheckInventoryForFishingRod = function() return trueend,
- Checks if the player has a fishing rod in their inventory
- Returns:
true
if player has a rod,false
otherwise - Called before starting fishing to verify equipment
AddFishingRodToInventory = function() return trueend,
- Adds a fishing rod to the player’s inventory when purchased
- Returns:
true
if successfully added,false
if failed (e.g., inventory full) - Called when purchasing a rod from shops
-
Bait Management
GetBaitInInventory = function() return {}end,
- Retrieves all bait items from player’s inventory
- Returns: Table of bait items in format:
{{name = "Worm", amount = 5},{name = "Lure", amount = 2}}
- Called when opening inventory or starting fishing
RemoveBaitFromInventory = function(name, amount) return trueend,
- Removes specified amount of bait after use
- Parameters:
name
: String - Name of the baitamount
: Number - Amount to remove
- Returns:
true
if successfully removed,false
if failed - Called when bait is consumed during fishing
AddBaitToInventory = function(name, amount) return trueend,
- Adds bait to inventory when purchased
- Parameters:
name
: String - Name of the baitamount
: Number - Amount to add
- Returns:
true
if successfully added,false
if failed - Called when purchasing bait from shops
-
Fish Management
AddFishToInventory = function(name, weight) return trueend,
- Adds caught fish to player’s inventory
- Parameters:
name
: String - Name of the fishweight
: Number - Weight of the fish in kilos
- Returns:
true
if successfully added,false
if failed - Called when player keeps a caught fish
GetFishInInventory = function() return {}end,
- Retrieves all fish from player’s inventory
- Returns: Table of fish in format:
{{name = "Tuna", weight = 5.2},{name = "Bass", weight = 2.1}}
- Called when opening inventory or visiting sell locations
CheckInventoryForIllegalFish = function() return falseend,
- Checks if player has any illegal fish in their inventory
- Returns:
true
if illegal fish found,false
otherwise - Called during police checks (if enabled)
-
Money System
UseCustomMoney = false,
Set this to true
to use your own money system functions instead of the default ones. When enabled, you’ll need to implement both money-related functions below.
PurchaseProduct = function(price) return trueend,
- Handles purchase transactions for shops
- Parameters:
price
: Number - Cost of the item
- Returns:
true
if transaction successful,false
if insufficient funds - Called when purchasing items from shops
Payout = function(money) -- Add money to player's balanceend,
- Handles receiving money from selling fish
- Parameters:
money
: Number - Amount to add to player’s balance
- Called when selling fish at sell locations
Example Implementation
Here’s a basic example showing how you might implement these functions with a custom framework:
local MyFramework = exports['my-framework']:GetFramework()
Config.Integration = { UseCustomInventory = true,
CheckInventoryForFishingRod = function() local items = MyFramework.GetPlayerItems() return items['fishing_rod'] and items['fishing_rod'].amount > 0 end,
AddFishToInventory = function(name, weight) return MyFramework.AddItem(name, 1, {weight = weight}) end,
-- Implement other functions similarly...}
Support
Read through the instructions again if you have not managed to install or configure the resource. Can’t get it to work still? Create a ticket through our dedicated support system in Discord:
Discord