Fishing Simulator
A complete RPG fishing overhaul. Features a skill tree, custom rod mechanics, daily missions, legendary catches, and a dynamic market system.
Database Installation
Run this query to create the table that stores player XP, Skill Points, and Mission progress.
CREATE TABLE IF NOT EXISTS `xada_fishing` (
`identifier` varchar(60) NOT NULL,
`level` int(11) DEFAULT 1,
`xp` int(11) DEFAULT 0,
`skill_points` int(11) DEFAULT 0,
`skills` longtext DEFAULT '{}',
`missions` longtext DEFAULT '[]',
`last_mission_reset` int(11) DEFAULT 0,
`achievements` longtext DEFAULT '[]',
`global_stats` longtext DEFAULT '{}',
PRIMARY KEY (`identifier`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;Inventory Setup
The script relies on specific item names for the gear system to work. Add these to your ox_inventory/data/items.lua (or equivalent).
fish_mackerel) should have weight = 0 in the database/items file because the script assigns a custom specific weight (e.g., 4.5kg) to the item metadata when caught.-- RODS (Tools)
['fishing_rod_starter'] = {
label = 'Bamboo Rod',
weight = 1000,
stack = false,
close = true,
description = 'A basic rod for beginners. Good flexibility.',
client = { image = 'fishing_rod_starter.png' }
},
['fishing_rod_carbon'] = {
label = 'Carbon X Rod',
weight = 1200,
stack = false,
close = true,
description = 'High-tech carbon fiber. High load capacity.',
client = { image = 'fishing_rod_carbon.png' }
},
['test_rod'] = {
label = 'Dev Rod',
weight = 500,
stack = false,
close = true,
description = 'Admin testing tool.',
client = { image = 'test_rod.png' }
},
-- REELS (Components)
['fishing_reel_rusty'] = {
label = 'Rusty Reel',
weight = 200,
stack = true,
close = true,
description = 'It squeaks, but it works.',
client = { image = 'fishing_reel_rusty.png' }
},
['fishing_reel_pro'] = {
label = 'Tsurinoya Pro',
weight = 350,
stack = true,
close = true,
description = 'Professional grade reel with high drag power.',
client = { image = 'fishing_reel_pro.png' }
},
-- LINES (Components)
['fishing_line_mono'] = {
label = 'Mono Line',
weight = 50,
stack = true,
close = true,
description = 'Standard monofilament line.',
client = { image = 'fishing_line_mono.png' }
},
['fishing_line_braid'] = {
label = 'Braid Line',
weight = 50,
stack = true,
close = true,
description = 'Heavy duty braided line.',
client = { image = 'fishing_line_braid.png' }
},
-- BAITS & LURES
['fishing_bait_worm'] = {
label = 'Worms',
weight = 10,
stack = true,
close = true,
description = 'Live bait. Fish love them.',
client = { image = 'fishing_bait_worm.png' }
},
['fishing_bait_lure'] = {
label = 'Shiny Lure',
weight = 25,
stack = true,
close = true,
description = 'A metal lure that attracts aggressive fish.',
client = { image = 'fishing_bait_lure.png' }
},
-- FISH EXAMPLES (Add all from config)
['fish_tuna'] = {
label = 'Bluefin Tuna',
weight = 0, -- Script handles weight via metadata
stack = false,
close = true,
description = 'A massive prize catch.',
client = { image = 'fish_tuna.png' }
},General Configuration
Basic setup for framework detection, interaction styles, and debug modes.
Config = {}
-- Options: 'en', 'lt'. Check locales/ folder.
Config.Locale = 'en'
-- Framework: 'esx' or 'qb'
Config.Framework = 'qb'
-- Notifications: 'esx', 'qb', 'ox'
Config.Notify = 'ox'
-- Interaction: 'textui' (E) or 'target' (Third Eye)
Config.Interaction = 'target'
Config.Target = 'ox_target' -- 'ox_target' or 'qb-target'
-- Inventory: Optimized for 'ox' due to metadata
Config.Inventory = 'ox'
Config.Debug = false -- Enable for console print logsLocations & Shops
Setup the Tackle Shop (where players buy gear) and the Fish Market (where they sell catches).
-- The Tackle Shop (Buy Rods/Bait)
Config.FishingShop = {
location = vector4(-731.36, -1310.35, 5.00, 290.5),
model = 's_m_y_dockwork_01',
blip = { enabled = true, sprite = 88, color = 3, scale = 0.8, label = 'Fishing Shop' }
}
-- The Fish Buyer (Sell Caught Fish)
Config.FishBuyer = {
location = vector4(-1037.91, -1397.02, 5.55, 120.0),
model = 's_m_m_linecook',
blip = { enabled = true, sprite = 500, color = 2, scale = 0.8, label = 'Fish Market' }
}Gear & Stats
The script uses a modular rod system. Players combine Rods, Reels, Lines, and Bait. Each part adds specific stats to the fishing minigame.
Config.ShopContent = {
-- RODS: 'statValue' = Max Load. Higher value = Less tension buildup.
rods = {
{ name = "fishing_rod_starter", label = "Bamboo Rod", price = 100, statValue = 20, icon = "fa-wand-magic" },
{ name = "fishing_rod_carbon", label = "Carbon X", price = 5000, statValue = 80, icon = "fa-bolt" },
},
-- REELS: 'statValue' = Drag Power. Higher value = Faster reeling speed.
reels = {
{ name = "fishing_reel_rusty", label = "Rusty Reel", price = 50, statValue = 15, icon = "fa-ring" },
{ name = "fishing_reel_pro", label = "Tsurinoya Pro", price = 2500, statValue = 75, icon = "fa-dharmachakra" },
},
-- LINES: 'statValue' = Strength. Prevents line snapping on heavy fish.
lines = {
{ name = "fishing_line_mono", label = "Mono Line", price = 10, statValue = 20, icon = "fa-timeline" },
{ name = "fishing_line_braid", label = "Braid Line", price = 250, statValue = 80, icon = "fa-hashtag" },
},
-- BAITS:
-- 'statValue' = Attraction (How fast fish bite).
-- 'style' = 'bobber' (Passive) or 'lure' (Active minigame).
-- 'loseChance' = % chance to lose bait after cast.
baits = {
{ name = "fishing_bait_worm", label = "Worms", price = 5, statValue = 30, loseChance = 100, style = 'bobber' },
{ name = "fishing_bait_lure", label = "Shiny Lure", price = 500, statValue = 60, loseChance = 5, style = 'lure' },
}
}Loot Table
Configure what can be caught, how hard it is to catch, and how much it sells for.
Config.FishTable = {
-- TIER 1 (Easy)
{
item = 'fish_minnow',
label = 'Minnow',
difficulty = 0.5, -- Speed of the "fighting" bar
minWeight = 0.05, -- Random weight generation (kg)
maxWeight = 0.2,
pricePerKg = 20, -- Sell price calculation
xp = 5 -- XP Gained
},
-- TIER 5 (Legendary)
{
item = 'fish_shark',
label = 'Tiger Shark',
difficulty = 9.5,
minWeight = 60.0,
maxWeight = 300.0,
pricePerKg = 400,
xp = 300
},
}Skills & Progression
The script features a Skill Tree (Visual Whiteboard UI), Achievements, and Daily Missions.
Skill Tree
Uses X/Y coordinates to place nodes on the UI.
Config.Skills = {
['novice'] = {
label = "Novice Angler",
cost = 0,
x = 0, y = 0
},
['strength_1'] = {
label = "Strong Arms I",
cost = 1,
description = "Reel 10% faster",
parent = 'novice', -- Prerequisite
x = -200, y = 0
}
}Daily Missions
Picks 3 random tasks every 24 hours.
-- Resets every 24 hours (86400s)
Config.MissionResetTime = 86400
Config.MissionPool = {
{
item = 'fish_trout',
label = 'River Run',
count = {5, 10}, -- Catch 5 to 10 fish
rewardMoney = {300, 500},
rewardXP = {50, 100}
},
}Discord Logging
Track rare catches, mission completions, and potential exploits.
Config.DiscordLogs = {
Enabled = true,
Webhook = "https://discord.com/api/webhooks/...",
BotName = "Xada Fishing",
BotAvatar = "https://i.imgur.com/P9J9x6y.png",
Colors = {
Achievement = 16776960, -- Gold
Mission = 65280, -- Green
Admin = 16711680 -- Red
}
}