Configuration

Guide

The config.lua file controls all aspects of the money washing system. This guide explains each section and how to customize them.

Basic Settings

-- Language setting (available: 'en', 'cz')
lang = 'en',

Available Languages:

  • 'en' - English

  • 'cz' - Czech

Money & Item Configuration

-- Item given when counting money is completed
-- Set to false to give cash directly, or specify item name like 'cash'
money_item = false,

-- Dirty money item required for money rain at strip clubs
dirtymoney_item = 'markedbills',

-- Maximum amount taken per money rain action
dirtymoney_drop_limit = 10000,

-- Cash bag item given when collecting processed money
cashbag_item = 'cashbag',

Options:

  • money_item: false = direct cash, 'itemname' = give specific item

  • dirtymoney_item: Item players use for money rain (should match your server's dirty money item)

  • dirtymoney_drop_limit: Prevents players from dropping massive amounts at once

  • cashbag_item: Item containing dirty money for counting

Money Counting System

-- Maximum amount processed per counting session chunk
max_chunk_size = 50000,

Large cash bags are processed in chunks to create realistic counting time. Higher amounts = longer counting sessions.

Money Rain System

-- Time in milliseconds before rain props reset/disappear
rain_level_reset = 900000, -- 15 minutes

-- Rain levels based on money amount - each level adds visual props
rain_levels = {
    { min_cash = 1000, model = `bkr_cash_scatter_02` },        -- Level 1
    { min_cash = 10000, model = `bkr_prop_bkr_cash_scatter_03` }, -- Level 2  
    { min_cash = 50000, model = `bkr_prop_bkr_cash_scatter_01` }, -- Level 3
    { min_cash = 100000, model = `ex_cash_pile_07` },            -- Level 4
},

How Rain Levels Work:

  • Players throw money at strippers

  • Money accumulates and creates visual props

  • Higher amounts = more impressive props

  • Props disappear after rain_level_reset time

Tax System

-- Tax rates based on total money collected lifetime
-- Higher total collected = lower tax rate (loyalty discount)
levels = {
    { tax = 10, min_collect = 0 },          -- 10% tax for new players
    { tax = 9,  min_collect = 10000000 },   -- 9% tax after collecting 10M
    { tax = 8,  min_collect = 20000000 },   -- 8% tax after collecting 20M
    { tax = 7,  min_collect = 30000000 },   -- 7% tax after collecting 30M
    { tax = 6,  min_collect = 40000000 },   -- 6% tax after collecting 40M
    { tax = 5,  min_collect = 50000000 },   -- 5% tax after collecting 50M
    { tax = 4,  min_collect = 60000000 },   -- 4% tax after collecting 60M
    { tax = 3,  min_collect = 70000000 },   -- 3% tax after collecting 70M
    { tax = 2,  min_collect = 80000000 },   -- 2% tax after collecting 80M
    { tax = 1,  min_collect = 90000000 },   -- 1% tax after collecting 90M
    { tax = 0,  min_collect = 100000000 },  -- 0% tax after collecting 100M
},

Tax System Logic:

  • New players start with 10% tax

  • As lifetime collections increase, tax rate decreases

  • Rewards loyal/high-volume customers

  • Creates progression incentive

Trap Phone & Contacts

phone_item = 'trapphone',

-- Available contact locations (system picks one randomly every server session)
contacts = {
    { 
        pos = vec4(776.1, 4183.99, 40.77, 87.87),
        model = `g_m_importexport_01`,
        name = 'Stanley Washburn',
        description = "(420) 555-0147",
    },
    -- ... more contacts
},

Contact System:

  • One random contact is selected per server restart

  • Players call contacts to get cash bag pickup locations

  • NPC spawns at the selected location

  • Easy to add new contact locations

Map Detection & Locations

Strip Club Locations

maps = {
    strip_clubs = {
        -- Default vanilla strip club
        ["default"] = {
            locations = {
                { 
                    zone = { 
                        pos = vector4(113.46, -1288.39, 28.46, 30.0), 
                        qb_target = { width = 4.5, length = 2.9, distance = 1.0 },
                        ox_target = { size = vec3(1.0, 1.0, 1.0), distance = 1.0 },
                        distance = 3.0, -- for non target users
                        debug = true 
                    },
                    model = `s_f_y_stripper_02`, -- or false
                    npc_pos = vector4(113.16, -1287.94, 27.46, 250.0),
                    anim = { dict = "oddjobs@assassinate@multi@yachttarget@lapdance", name = "yacht_ld_f" },
                    prop_spawn = vector4(113.16, -1287.94, 27.46, 288.79)
                },
                -- ... more locations
            },
        },

        -- Custom map support
        ["Maps_Bella_Vanilla_qrixus_-_by_Ajna_Mods"] = {
            locations = {
                -- Custom positions for this map
            },
        },
    },
}

Money Counter Locations

counters = {
    -- Default money wash location
    ["default"] = {
        locations = {
            { 
                pos = vec4(1116.0, -3194.94, -40.59, 90.03),
                qb_target = { width = 0.5, length = 0.5, distance = 1.0 },
                ox_target = { size = vec3(0.5, 0.5, 0.5), distance = 1.0 },
                distance = 1.5, -- for non target users
                debug = true 
            },
            -- ... more counters
        }
    },

    -- Custom map support  
    ["tstudio_laundromat"] = {
        locations = {
            -- Custom positions for laundromat map
        },
    },
}

Adding Custom Maps

1. Find the Map Resource Name

Check your server's resources folder for the exact map name.

2. Add Map Configuration

["your_map_name"] = {
    locations = {
        {
            zone = { 
                pos = vector4(x, y, z, heading),
                qb_target = { width = 2.0, length = 2.0, distance = 1.0 },
                ox_target = { size = vec3(1.0, 1.0, 1.0), distance = 1.0 },
                distance = 2.0,
                debug = true 
            },
            
            model = `ped_model_hash`, -- or false
            npc_pos = vector4(x, y, z, heading),
            anim = { dict = "anim_dict", name = "anim_name" },
            prop_spawn = vector4(x, y, z, heading)
        }
    }
}

3. Test Configuration

Enable debug = true to see interaction zones in-game and adjust positions as needed.

Last updated