> For the complete documentation index, see [llms.txt](https://beetle-studios.gitbook.io/beetle-studios-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://beetle-studios.gitbook.io/beetle-studios-docs/beetle-studios/cayo-perico-money-laundering/installation-and-config.md).

# Installation & Config

## Installation

1. Unzip `bs_cayobanco.pack`  and `bs_cayobanco_phone.pack` (optional)
2. Place the `bs_cayobanco` folder into your `[standalone]` folder in your server `resources` folder.
3. (optional) Place the `bs_cayobanco_phone` folder into your `[standalone]` folder in your server `resources` folder.
4. Run  `bs_cayobanco/sql/install.sql` to update your database.
5. Add the access card item png in `bs_cayobanco/items/` to `ox_inventory/web/images` .
6. Add the access card item snippet in `bs_cayobanco/items/ox_inventory_item_snippet.lua` to `ox_inventory/data/items.lua` .

## Config

```lua
Config = {}

---@type 'esx'|'qb'|'qbx'
Config.Framework = 'qbx'

Config.Debug = false

-- ox_inventory item names (must exist in ox_inventory items)
Config.Items = {
    dirtyMoney = 'black_money',
    accessCard = 'cayobanco_access_card',
    silverBar = 'silverbar',
    goldBar = 'goldbar',
}

-- Lifetime total dirty money successfully queued for laundering (all types)
Config.Progression = {
    openAccountTotalLaundered = 100000,
    unlockGoldTotalLaundered = 100000,
    unlockCashTotalLaundered = 250000,
}

-- Settlement delay from job creation until claimable (seconds)
Config.Durations = {
    silverSeconds = 60, -- 24h 86400
    goldSeconds = 60, -- 72h 259200
    cashSeconds = 60, -- 7d 604800
}

-- Fourth tier: faster cash laundering once lifetime total reaches threshold
Config.SpeedTier = {
    enabled = true,
    minTotalLaundered = 500000,
    cashSeconds = 60, -- 72h 259200
}

-- How often server flips pending -> ready
Config.JobSweepIntervalSeconds = 30

-- Max active laundering jobs (pending + ready) per character at once; set 0 to disable limit
Config.MaxQueuedJobs = 10

-- Offshore ledger (clean cash held until withdrawn). Deposit with wallet cash; withdraw to wallet.
Config.Offshore = {
    depositMin = 1,
    depositMax = 999999999,
    withdrawMin = 1,
    withdrawMax = 999999999,
}

-- Card vendor (no access card required)
Config.CardVendor = {
    model = 's_m_m_highsec_01',
    coords = vec4(5095.11, -4607.41, 3.25, 167.17),
    scenario = 'WORLD_HUMAN_STAND_IMPATIENT',
    blip = {
        enabled = false,
        sprite = 500,
        color = 5,
        scale = 0.75,
        label = 'Cayo Banco — Access Card',
    },
}

-- Private banker (requires access card to open UI)
Config.Banker = {
    model = 'S_M_M_HighSec_04',
    coords = vec4(5117.62, -5190.7, 2.39, 88.67),
    scenario = 'WORLD_HUMAN_CLIPBOARD',
    blip = {
        enabled = false,
        sprite = 500,
        color = 5,
        scale = 0.75,
        label = 'Cayo Banco',
    },
}

-- Initial card: pay with clean cash, dirty money, or both (0 = skip that currency)
Config.CardPurchase = {
    initialCash = 0,
    initialDirty = 50000,
    replacementDirty = 25000,
}

-- Per job type limits (dirty money submitted)
Config.Limits = {
    silver = { min = 1000, max = 250000 },
    gold = { min = 5000, max = 500000 },
    cash = { min = 10000, max = 1000000 },
}

--[[
  Increment-based bar payouts:
  - silver: every `dirtyPerIncrement` dirty gives `barsPerIncrement` silver bars
  - gold:   every `dirtyPerIncrement` dirty gives `barsPerIncrement` gold bars
  Dirty amount for silver/gold jobs must be an exact multiple of the increment.
]]
Config.Conversion = {
    silver = {
        dirtyPerIncrement = 20000,
        barsPerIncrement = 10,
    },
    gold = {
        dirtyPerIncrement = 50000,
        barsPerIncrement = 5,
    },
}

-- Cash laundering keeps multiplier-based payout
Config.Rates = {
    cashReturnMultiplier = 0.62,
}

```

(optional) lb-phone companion app config

```lua
Config = {}

Config.Identifier = "bs_cayobanco_phone"
-- lb-phone: false = players must download from the App Store (see AppPrice).
Config.DefaultApp = false
-- In-game money charged when downloading from the App Store (0 = free).
Config.AppPrice = 25000

Config.Name = "Cayo Banco"
Config.Description = "Trustworthy international banking services."
Config.Developer = "Beetle Studios"

Config.Size = 28600

Config.DevMode = false
Config.DevUrl = "http://localhost:3000/"
```
