DocsJobsFishing Simulator

Fishing Simulator

A complete RPG fishing overhaul. Features a skill tree, custom rod mechanics, daily missions, legendary catches, and a dynamic market system.

1

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;
2

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

Important: Fish items (like 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' }
},
3

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 logs
4

Locations & 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' }
}
5

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' },
    }
}
6

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 
    },
}
7

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} 
    },
}
8

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
    }
}