> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cc-scripts.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuration

> NPC placement, payment sources, key tunables, and the Lua files you can edit freely.

Everything `cc_fishing` exposes for tuning lives in `shared/config.lua` unless noted. Paths are relative to the resource root. Restart `cc_fishing` after editing.

## Module toggles

`cfg.modules`. Flip any to `false` to disable that feature entirely — its NPCs, blips, target options, useable items, menu entries, and background loops all go dormant. Core fishing (the fishing NPC, casting, and selling fish) is always on.

```lua theme={null}
cfg.modules = {
    pawnshop_ped = true,   -- the dedicated fish-selling NPC + blip
    anchor       = true,   -- boat anchor useable item
    boat_rentals = true,   -- rent/return boat + the menu entries for it
    nets         = true,   -- placeable fishing nets
    treasure     = true,   -- treasure hunts, maps, sunken safes
    logbook      = true,   -- logbook useable item
    tournaments  = {
        weekly = true,     -- rolling 7-day tournament
        daily  = true,     -- scheduled live daily events
    },
}
```

| Toggle               | What turning it off removes                                            |
| -------------------- | ---------------------------------------------------------------------- |
| `pawnshop_ped`       | The pawnshop NPC and its blip. Selling still works at the fishing NPC  |
| `anchor`             | The `anchor` item's effect                                             |
| `boat_rentals`       | The rent/return options in the fishing menu                            |
| `nets`               | Placing, tending, and collecting fishing nets                          |
| `treasure`           | Treasure map drops, maps, and sunken safes. Bait digging is unaffected |
| `logbook`            | The `logbook` item                                                     |
| `tournaments.weekly` | The weekly tournament and its menu entry                               |
| `tournaments.daily`  | The daily live tournaments and their menu entry                        |

<Note>
  Disabling `treasure` stops new treasure maps from dropping, but players can still sell treasure loot they already hold.
</Note>

## NPC placement

`cfg.npc`. Change the model or coords and restart; blips, peds, and target zones rebuild from this block.

```lua theme={null}
cfg.npc = {
    fishing = {
        model       = 'a_m_y_beach_01',
        coords      = vector4(1302.95, 4228.7, 33.91, 18.89),
        blip_sprite = 780,
        blip_color  = 3,
        blip_scale  = 0.60,
    },
    pawnshop = {
        model       = 'cs_nervousron',
        coords      = vector4(-1459.56, -413.97, 35.74, 161.5),
        blip_sprite = 500,
        blip_color  = 5,
        blip_scale  = 0.60,
    },
}
```

## Payment sources

`cfg.money`. Each entry is `'cash'` or `'bank'`.

```lua theme={null}
cfg.money = {
    buy_equipment     = 'bank',
    boat_rental       = 'bank',
    tournament_reward = 'bank',
    challenge_reward  = 'bank',
    sell_treasure     = 'cash',
    sell_fish         = 'cash',
}
```

## Key tunables

| Field                                            | Default                 | What it does                                                              |
| ------------------------------------------------ | ----------------------- | ------------------------------------------------------------------------- |
| `cfg.cast.wait_min_seconds` / `wait_max_seconds` | `25` / `40`             | Bite-wait window before any level reduction                               |
| `cfg.cast.wait_floor_seconds`                    | `15`                    | Hard floor on bite wait after level reduction                             |
| `cfg.length_skew`                                | `2.5`                   | Catch-length distribution. Higher = trophies are rarer                    |
| `cfg.level_thresholds`                           | 30 tiers                | XP totals per level. Edit to reshape progression                          |
| `cfg.market.floor` / `ceiling`                   | `0.75` / `1.25`         | Pawnshop multiplier bounds                                                |
| `cfg.market.impact` / `recovery`                 | `0.10` / `0.05`         | Per-sale push toward the floor; per-tick recovery                         |
| `cfg.tournament.duration_days`                   | `7`                     | Weekly tournament length                                                  |
| `cfg.tournament.prizes`                          | `{ 10000, 5000, 2500 }` | Weekly top-3 prize pool                                                   |
| `cfg.active_tournament.daily_hours`              | `{ 12, 20 }`            | Server-clock start times for daily tournaments                            |
| `cfg.active_tournament.zones`                    | 8 zones                 | Zones eligible to host a daily tournament                                 |
| `cfg.treasure.base_chance`                       | `0.5`                   | % treasure-drop chance per catch (before level/bait bonuses)              |
| `cfg.treasure.bait_bonus_mult`                   | `15.0`                  | Treasure-chance multiplier when using `treasure_bait`                     |
| `cfg.nets.catch_interval`                        | `1800`                  | Seconds between net catch rolls                                           |
| `cfg.nets.max_per_player`                        | `2`                     | Per-player net cap                                                        |
| `cfg.boat.rental_price` / `return_refund`        | `500` / `0.25`          | Boat rental price and the fraction refunded on return                     |
| `cfg.rod.low_durability`                         | `10`                    | Remaining durability at which the player is warned the rod is wearing out |

<Note>
  Offline weekly-tournament winners are paid on their next login. Offline daily-tournament winners forfeit — daily events are live, in-zone only.
</Note>

## Editable Lua files

Each file is a plain Lua list — add, remove, reorder. Restart `cc_fishing` after editing.

| File                    | What's in it                                                             |
| ----------------------- | ------------------------------------------------------------------------ |
| `shared/fish.lua`       | All catchable fish: tier, length range, XP, base price, zone preferences |
| `shared/tiers.lua`      | Tier display labels, order, icons                                        |
| `shared/zones.lua`      | Fishing zones, per-zone boost/blacklist, treasure multiplier             |
| `shared/equipment.lua`  | Rods, baits, shop items — prices, level gates, boosts                    |
| `shared/challenges.lua` | Daily challenge pool — match predicates, rewards, level gates            |
| `shared/treasures.lua`  | Treasure loot tables and per-tier safe payouts                           |

<Warning>
  These files are not escrow-locked, but renaming a fish or item id means also renaming its inventory item (see [installation](/cc_fishing/installation)). Keep the ids in sync.
</Warning>

## Treasure minigame

Cracking a sunken safe runs a minigame defined in `client/minigames.lua` (escrow-ignored). It returns `true` on success, `false` on fail/cancel — swap the body for anything with that contract and nothing else changes.

Out of the box there's **no minigame** — the safe opens on interact:

```lua theme={null}
treasure_safe = function()
    return true
end,
```

Safes are opened underwater, where the [ox\_lib skill check](https://overextended.dev/ox_lib/Modules/Interface/Client/skillcheck) cancels itself instantly, so it's not the default. Both alternatives ship commented in the file. To add a real gate, pick one.

The [`cc_minigames`](/cc_minigames/index) safe-cracker works underwater (needs `cc_minigames` running):

```lua theme={null}
treasure_safe = function()
    return exports.cc_minigames:Safe({
        difficulty = cfg.treasure.safe_difficulty or 'medium',
        variant    = 'bare',
    })
end,
```

The ox\_lib skill check works only for **land-based** safes:

```lua theme={null}
treasure_safe = function()
    return lib.skillCheck(cfg.treasure.safe_difficulty or 'medium')
end,
```

`cfg.treasure.safe_difficulty` (`'easy' | 'medium' | 'hard'`) feeds either one. For a longer, multi-stage crack, pass an array — e.g. `lib.skillCheck({ 'easy', 'easy', 'hard' })`. Or use any other `cc_minigames` export — see the [minigames reference](/cc_minigames/minigames).
