Skip to content

config.lua

The complete default config.lua for Petty Crimes (sd-pettycrime). Use this as a reference or a starting point for your own configuration.

TIP

This is the full, unedited config file. For a detailed explanation of each option, see the Configuration page.

Download config.lua

lua
return {
    Locale = 'en', -- Locale used to load `locales/<Locale>.json`. Falls back to `en` if missing.
    ShopLogging = true, -- Enable/Disable logging for shop/ped actions.
    IconColors = false, -- Enable/Disable icon colors in the menus.
    ShowRequiredItemsInNotify = true, -- When a robbery fails because you lack the tool, name the required item(s) in the notification (e.g. "(Requires: Lockpick)"). Most useful with a crime's ShowTargetWithoutItem enabled.
    AllowCancel = true, -- Whether players can cancel a crime's progress bar (press X). true = cancellable (good if cops show up); false = locked in until it finishes.

    -- ============================================================================
    -- Debug logging. Master switch for the resource's tagged diagnostic prints
    -- (tag format: [sd-pettycrime:<category>]). OFF by default — flip to true to
    -- trace what the resource is doing in the client (F8) and server consoles.
    --
    -- DebugCategories optionally narrows the firehose once DebugPrints is true:
    --   {}                -> every category prints
    --   { fuel = true }   -> ONLY fuelsabotage (any `true` => allowlist mode)
    --   { fuel = false }  -> everything EXCEPT fuelsabotage (only `false`s => denylist)
    -- Categories are the crime names (mailbox, payphone, ... speedbomb), the
    -- bridge modules (bridge:inventory, bridge:fuel, bridge:money, ...), and the
    -- core systems (shop, rewards, stats, cooldown, tools, menus, ped, ...).
    -- ============================================================================
    DebugPrints = false,
    DebugCategories = {},

    -- ============================================================================
    -- Tool wear. The tool a player used to commit a crime loses durability and
    -- eventually breaks. Durability is the primary system; an optional flat
    -- break-chance can also be turned on. Per-crime amounts live in each crime
    -- config as `ToolDrain` (durability lost per success) and `ToolBreakChance`
    -- (% chance to break per success); cardoor can override both per door. Works
    -- on ox / qb / qs / origen / codem / tgiann / jaksam — on inventories without
    -- per-slot metadata, durability is skipped automatically but break-chance
    -- still works.
    -- ============================================================================
    ToolWear = {
        Durability = {
            Enable = true,          -- Master switch: drain the used tool's durability on a successful crime.
            Max = 100,              -- Durability a fresh tool (no durability metadata yet) is treated as starting at.
            NotifyOnLow = true,     -- Warn the player when a tool's durability drops to/below LowThreshold.
            LowThreshold = 20,      -- The "getting low" warning fires at or below this durability value.
            IncludeWeapons = true, -- Also wear/break WEAPON_* tools (e.g. WEAPON_HATCHET). false = leave weapons untouched.
        },
        BreakChance = {
            Enable = false,         -- Master switch: flat % chance (per crime's ToolBreakChance) to instantly break the used tool on success. Independent of durability.
        },
    },

    -- ============================================================================
    -- Personal anti-spam cooldowns. A PER-PLAYER cooldown (on top of each crime's
    -- per-target cooldown) so one player can't rattle off the same crime over and
    -- over, whatever target they pick. Keyed by player identifier, so reconnecting
    -- doesn't reset it (it clears on resource restart). Time is in SECONDS; if a
    -- player tries again too soon they're told how long is left (minutes, or
    -- seconds when under a minute). Enabled on the destructive / dangerous crimes
    -- by default and wired-but-off on the pettier ones -- flip Enable per crime.
    -- (atmskimmer is intentionally not listed: no personal cooldown.)
    -- ============================================================================
    PersonalCooldowns = {
        -- Destructive / dangerous -- ON by default.
        catalytic    = { Enable = true,  Time = 180 }, -- 3 min
        tiretheft    = { Enable = true,  Time = 180 },
        wheelloose   = { Enable = true,  Time = 180 },
        brakecut     = { Enable = true,  Time = 240 }, -- 4 min
        fuelsabotage = { Enable = true,  Time = 180 },
        brickgas     = { Enable = true,  Time = 240 },
        speedbomb    = { Enable = true,  Time = 300 }, -- 5 min

        -- Pettier crimes -- wired but OFF by default (set Enable = true to use).
        acstrip      = { Enable = false, Time = 180 },
        cardoor      = { Enable = false, Time = 180 },
        tireslash    = { Enable = false, Time = 120 },
        shoplift     = { Enable = false, Time = 120 },
        mailbox      = { Enable = false, Time = 120 },
        parkingmeter = { Enable = false, Time = 120 },
        payphone     = { Enable = false, Time = 120 },
        newsrack     = { Enable = false, Time = 120 },
        vending      = { Enable = false, Time = 120 },
        parceltheft  = { Enable = false, Time = 120 },
        smashgrab    = { Enable = false, Time = 180 },
        signrob      = { Enable = false, Time = 120 },

        -- robaped / pickpocket: migrated here from their own configs. Left OFF by
        -- default, matching their previous defaults.
        robaped      = { Enable = false, Time = 30 },
        pickpocket   = { Enable = false, Time = 30 },
    },

    Ped = {
        Location = {
            {x = 366.44, y = -1250.83, z = 31.51, w = 321.98},
            -- Add more locations as needed (Will Randomize from available locations each script start)
        },
        Model = "a_m_m_mlcrisis_01",
        Interaction = {
            Icon = "fas fa-circle",
            Distance = 3.0,
        },
        Scenario = "WORLD_HUMAN_STAND_IMPATIENT" -- Full list of scenarios @ https://pastebin.com/6mrYTdQv
    },
    Shop = {
        Enable = { Buying = true, Selling = true },
        BuyItems = {
            {
                Product = "lockpick", -- internal identifier for the item (item name)
                Price = 50, -- how much the player pays per unit
                Label = "Lockpick", -- direct string for title
                Description = "Essential tool for breaking into mailboxes and other locked containers", -- direct string for description
                IconName = "fas fa-key", -- FontAwesome icon
                IconColor = "#FFD700" -- Gold color for lockpick, if you don't have IconColor specified, no color will be applied.
            },
            {
                Product = "screwdriver",
                Price = 75,
                Label = "Screwdriver",
                Description = "Useful for tampering with parking meters and payphones",
                IconName = "fas fa-screwdriver",
                IconColor = "#C0C0C0"
            },
            {
                Product = "crowbar",
                Price = 150,
                Label = "Crowbar",
                Description = "Heavy-duty tool for more serious criminal activities",
                IconName = "fas fa-hammer",
                IconColor = "#e56969" 
            },
            {
                Product = "gloves",
                Price = 25,
                Label = "Gloves",
                Description = "Reduce the chance of leaving fingerprints behind",
                IconName = "fas fa-hand-paper",
                IconColor = "#26bbc5"
            },
            {
                Product = "multitool",
                Price = 120,
                Label = "Multitool",
                Description = "Pry open parking meters, payphones, newsracks and street signs",
                IconName = "fas fa-toolbox",
                IconColor = "#9E9E9E"
            },
            {
                Product = "anglegrinder",
                Price = 250,
                Label = "Angle Grinder",
                Description = "Cuts catalytic converters and AC units off in seconds",
                IconName = "fas fa-circle-notch",
                IconColor = "#FF5722"
            },
            {
                Product = "powersaw",
                Price = 300,
                Label = "Power Saw",
                Description = "Heavy cutting tool for catalytic converters and AC units",
                IconName = "fas fa-gears",
                IconColor = "#607D8B"
            },
            {
                Product = "oxycutter",
                Price = 350,
                Label = "Oxy Cutter",
                Description = "Oxy-acetylene torch that slices through catalytic converters and AC units in seconds",
                IconName = "fas fa-fire",
                IconColor = "#FF5722"
            },
            {
                Product = "bolt_cutter",
                Price = 180,
                Label = "Bolt Cutters",
                Description = "Snap locks and metal on AC units and converters",
                IconName = "fas fa-scissors",
                IconColor = "#90A4AE"
            },
            {
                Product = "cutter",
                Price = 90,
                Label = "Cutting Tool",
                Description = "Slash tyres, snip brake lines and puncture fuel tanks",
                IconName = "fas fa-scissors",
                IconColor = "#B0BEC5"
            },
            {
                Product = "wirecutter",
                Price = 90,
                Label = "Wire Cutters",
                Description = "Snip brake lines cleanly",
                IconName = "fas fa-scissors",
                IconColor = "#B0BEC5"
            },
            {
                Product = "skimmer",
                Price = 400,
                Label = "Card Skimmer",
                Description = "Install on ATMs to harvest card data over time",
                IconName = "fas fa-credit-card",
                IconColor = "#4CAF50"
            },
            {
                Product = "atm_skimmer_usb",
                Price = 60,
                Label = "USB Stick",
                Description = "Slot it into an installed skimmer to record stolen card data",
                IconName = "fas fa-sd-card",
                IconColor = "#9E9E9E"
            },
            {
                Product = "brick",
                Price = 15,
                Label = "Brick",
                Description = "Wedge it on a gas pedal to send a parked car running",
                IconName = "fas fa-cube",
                IconColor = "#8D6E63"
            },
            {
                Product = "speed_bomb",
                Price = 25000,
                Label = "Speedbomb",
                Description = "Black-market car bomb — wire it under a parked vehicle. Arms when driven fast and blows if they slow down",
                IconName = "fas fa-bomb",
                IconColor = "#f44336"
            }
        },
        SellItems = {
            {
                Product = "jewelry",
                Price = 200,
                Label = "Stolen Jewelry",
                Description = "Valuable jewelry obtained from pickpocketing",
                IconName = "fas fa-gem",
                IconColor = "#9C27B0"
            },
            {
                Product = "electronics",
                Price = 150,
                Label = "Electronics",
                Description = "Electronic devices stolen from various sources",
                IconName = "fas fa-mobile-alt",
                IconColor = "#2196F3"
            },
            -- Reward valuables dropped by the various crimes (pickpocket, robaped,
            -- smashgrab, mailbox, catalytic, packages, etc.). Raw crafting scrap
            -- (copper/iron/steel/...) and food drops are intentionally left out —
            -- those route through other economy systems.
            {
                Product = "phone",
                Price = 120,
                Label = "Stolen Phone",
                Description = "A lifted smartphone, wiped and ready to move",
                IconName = "fas fa-mobile-screen",
                IconColor = "#2196F3"
            },
            {
                Product = "laptop",
                Price = 250,
                Label = "Stolen Laptop",
                Description = "A pinched laptop worth a fair bit to the right buyer",
                IconName = "fas fa-laptop",
                IconColor = "#3F51B5"
            },
            {
                Product = "goldchain",
                Price = 180,
                Label = "Gold Chain",
                Description = "A flashy gold chain",
                IconName = "fas fa-link",
                IconColor = "#FFD700"
            },
            {
                Product = "10kgoldchain",
                Price = 450,
                Label = "10k Gold Chain",
                Description = "A heavy 10-karat gold chain",
                IconName = "fas fa-link",
                IconColor = "#FFC107"
            },
            {
                Product = "gold_watch",
                Price = 220,
                Label = "Gold Watch",
                Description = "A stolen gold timepiece",
                IconName = "fas fa-clock",
                IconColor = "#FFD700"
            },
            {
                Product = "rolex",
                Price = 400,
                Label = "Rolex",
                Description = "A luxury watch that fences love",
                IconName = "fas fa-clock",
                IconColor = "#FFD700"
            },
            {
                Product = "goldbar",
                Price = 800,
                Label = "Gold Bar",
                Description = "A solid bar of gold — the big score",
                IconName = "fas fa-bars",
                IconColor = "#FFD700"
            },
            {
                Product = "diamond",
                Price = 600,
                Label = "Diamond",
                Description = "A loose cut diamond",
                IconName = "fas fa-gem",
                IconColor = "#00BCD4"
            },
            {
                Product = "diamond_ring",
                Price = 500,
                Label = "Diamond Ring",
                Description = "A stolen diamond ring",
                IconName = "fas fa-ring",
                IconColor = "#9C27B0"
            },
            {
                Product = "purse",
                Price = 90,
                Label = "Stolen Purse",
                Description = "A snatched purse and whatever's inside",
                IconName = "fas fa-bag-shopping",
                IconColor = "#E91E63"
            },
            {
                Product = "gang-keychain",
                Price = 40,
                Label = "Gang Keychain",
                Description = "A novelty keychain lifted off a mark",
                IconName = "fas fa-key",
                IconColor = "#795548"
            },
            {
                Product = "catalytic_converter",
                Price = 350,
                Label = "Catalytic Converter",
                Description = "A sawn-off converter packed with precious metals",
                IconName = "fas fa-car",
                IconColor = "#607D8B"
            },
            {
                Product = "oxygen_sensor",
                Price = 150,
                Label = "Oxygen Sensor",
                Description = "A salvaged O2 sensor",
                IconName = "fas fa-gauge",
                IconColor = "#607D8B"
            },
            {
                Product = "thermite",
                Price = 300,
                Label = "Thermite",
                Description = "Volatile contraband the fence will quietly take off your hands",
                IconName = "fas fa-fire",
                IconColor = "#FF5722"
            }
        },

        -- Special-cased sellable: loaded `usb` sticks are priced from the total
        -- `worth` stamped into each stick's metadata by the ATM skimmer (sum of
        -- every card it scanned), not a flat unit price. Only USBs that actually
        -- hold card data appear here; blank USBs stay a buyable tool. Each loaded
        -- stick renders/sells as one unit and pays out its stored worth.
        CardData = {
            Enable         = true,
            Item           = 'atm_skimmer_usb',
            Label          = 'Card Data USB',
            Description    = "Loaded skimmer USBs — the fence pays for the card data stored on them",
            IconName       = 'fas fa-sd-card',
            IconColor      = '#4caf50',
            SellMultiplier = 1.0, -- Fraction of stored worth the fence pays (0.8 = 80%).
            FallbackWorth  = 80,  -- $ for a loaded USB with no `worth` metadata (e.g. admin-spawned).

            -- How a sale consumes the stick:
            --   'usb'  → the whole USB is taken by the fence (player loses the stick).
            --   'data' → only the card data is sold; the now-blank USB is handed back for reuse.
            SellMode       = 'data',

            -- Sell-row title + description shown at the ped, picked by SellMode so
            -- the copy matches what actually happens to the stick.
            Modes = {
                usb  = {
                    Label       = 'Card Data USB',
                    Description  = 'Loaded skimmer USBs — the fence pays for the USB with the card data stored on them',
                },
                data = {
                    Label       = 'Card Data on USB',
                    Description  = 'The fence pays for the card data stored on them, and hands the blank USB back',
                },
            },
        }
    },
    Stats = {
        Enable = true,
    },

    Levels = {
        mailbox = {
            [1] = {
                -- Starting level - no XP threshold required
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 150,
            },
            [3] = {
                xpRequired = 300,
            }
        },
        payphone = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 120,
            },
            [3] = {
                xpRequired = 250,
            }
        },
        parkingmeter = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 180,
            },
            [3] = {
                xpRequired = 350,
            }
        },
        pickpocket = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 100,
            },
            [3] = {
                xpRequired = 200,
            }
        },
        robaped = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 200,
            },
            [3] = {
                xpRequired = 400,
            }
        },
        shoplift = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 80,
            },
            [3] = {
                xpRequired = 160,
            }
        },
        parceltheft = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 175,
            },
            [3] = {
                xpRequired = 380,
            }
        },
        vending = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 100,
            },
            [3] = {
                xpRequired = 220,
            }
        },
        catalytic = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 250,
            },
            [3] = {
                xpRequired = 550,
            }
        },
        smashgrab = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 200,
            },
            [3] = {
                xpRequired = 450,
            }
        },
        tiretheft = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 280,
            },
            [3] = {
                xpRequired = 600,
            }
        },
        acstrip = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 220,
            },
            [3] = {
                xpRequired = 480,
            }
        },
        newsrack = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 90,
            },
            [3] = {
                xpRequired = 220,
            }
        },
        atmskimmer = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 200,
            },
            [3] = {
                xpRequired = 460,
            }
        },
        tireslash = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 150,
            },
            [3] = {
                xpRequired = 320,
            }
        },
        brakecut = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 240,
            },
            [3] = {
                xpRequired = 520,
            }
        },
        wheelloose = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 200,
            },
            [3] = {
                xpRequired = 440,
            }
        },
        fuelsabotage = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 230,
            },
            [3] = {
                xpRequired = 500,
            }
        },
        signrob = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 100,
            },
            [3] = {
                xpRequired = 220,
            }
        },
        brickgas = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 200,
            },
            [3] = {
                xpRequired = 450,
            }
        },
        cardoor = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 180,
            },
            [3] = {
                xpRequired = 400,
            }
        },
        speedbomb = {
            [1] = {
                xpRequired = 0,
            },
            [2] = {
                xpRequired = 250,
            },
            [3] = {
                xpRequired = 550,
            }
        }
    }
}