Suty
Drug Sell System

Configuration

Configuration

Configuration is split across 5 files in config/ — all unencrypted and freely editable.

File Owns
config/main.lua Framework, commands, debug, interaction, zone toggle
config/drugs.lua Drug catalog (item, price, addiction, demand)
config/customers.lua Customer AI: spawn rate, behavior weights, ped models
config/police.lua Cop dispatch chance, alert text, integrations
config/trapphone.lua lb-phone app config (icon, theme, allowed jobs)

main.lua — global flags

Config.Framework = 'qbx'              -- 'qbx' | 'qb' | 'esx'
Config.Locale    = 'es'               -- 'es' | 'en'
Config.Debug     = false              -- console debug spam

Config.Notification = {
    Type = 'ox',                      -- 'ox' | 'qbcore' | 'okok' | 'mythic' | 'custom'
}

Config.Interaction = {
    UseTarget = true,                 -- true: ox_target | false: drawtext+E
    Distance  = 2.5,                  -- drawtext distance (UseTarget=false only)
}

Config.Commands = {
    Start = 'venderdrogas',           -- player command to start selling
    Stop  = 'pararventa',             -- player command to stop
}

Config.AdminCommands = {
    CreateZone = 'creardrugzone',     -- opens zone creator
    ToggleZone = 'toggledrugzone',    -- /toggledrugzone <id>
}

Config.DefaultCreator   = 'map'       -- 'map' (Leaflet) | 'freecam' (in-world)
Config.RestrictToZones  = true        -- false = sell anywhere

Config.AdditionalScripts = {
    op_Gangs = false,                 -- OP-Crime/OP-Gangs turf integration
}

drugs.lua — drug catalog

Each drug entry describes ONE saleable substance:

Config.Drugs['weed'] = {
    label             = 'Marihuana',
    item              = 'weed_bag',         -- must match ox_inventory item name
    basePrice         = 50,                 -- base $ per sale (before negotiation)
    addictionPerSale  = 0.02,               -- 0-1, how much customer addiction increases
    weight            = 1.0,                -- demand multiplier (relative to other drugs)
}

customers.lua — customer AI

Config.SpawnIntervalMs = 30000             -- min ms between customer spawns per zone
Config.MaxConcurrent   = 3                 -- max active customers per zone
Config.SpawnRadius     = { min = 15, max = 40 }  -- spawn distance from dealer

Config.Behaviors = {
    friendly = { weight = 70 },            -- pays + leaves
    robber   = { weight = 15 },            -- attempts rob if dealer is alone
    snitch   = { weight = 15 },            -- calls cops via dispatch
}

Config.PedModels = { 'a_m_y_business_01', 'a_m_y_stbla_01', ... }

Behavior weights are relative — they don't need to sum to 100.

police.lua — dispatch

Config.PoliceJobs       = { 'police', 'sheriff', 'bcso' }
Config.SnitchAlertText  = 'Posible venta de drogas reportada'
Config.SnitchUseDispatch = true            -- true: ps-dispatch / pma-dispatch / qb-dispatch
Config.DispatchResource = 'ps-dispatch'    -- which dispatch to use

trapphone.lua — lb-phone app

Config.Phone = {
    AppName        = 'Trap',
    AppIcon        = 'icon.png',           -- in html/trapphone/
    AccentColor    = '#16a34a',
    AllowedJobs    = nil,                  -- nil = anyone; or { 'unemployed', 'cannabis' }
}

See TRAPPHONE-GUIDE.md in the resource folder for the full app feature list.