Skip to content

EasyFishing 2.0 (Latest)

EasyGarages Thumb

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”

Granted Assets

Installing the resource

  1. Drag the resource into your resources folder.

  2. 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!

  1. 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.
  2. 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.
  3. 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
  4. 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
  5. 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)
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  1. 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 or false 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
  1. 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.

  1. 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.

  1. Fishing Rod Management

CheckInventoryForFishingRod = function()
return true
end,
  • 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 true
end,
  • 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
  1. 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 true
end,
  • Removes specified amount of bait after use
  • Parameters:
    • name: String - Name of the bait
    • amount: Number - Amount to remove
  • Returns: true if successfully removed, false if failed
  • Called when bait is consumed during fishing
AddBaitToInventory = function(name, amount)
return true
end,
  • Adds bait to inventory when purchased
  • Parameters:
    • name: String - Name of the bait
    • amount: Number - Amount to add
  • Returns: true if successfully added, false if failed
  • Called when purchasing bait from shops
  1. Fish Management

AddFishToInventory = function(name, weight)
return true
end,
  • Adds caught fish to player’s inventory
  • Parameters:
    • name: String - Name of the fish
    • weight: 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 false
end,
  • Checks if player has any illegal fish in their inventory
  • Returns: true if illegal fish found, false otherwise
  • Called during police checks (if enabled)
  1. 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 true
end,
  • 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 balance
end,
  • 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