OrigenNetwork
Docs

Configuration · origen_ilegalv2

All user-facing settings live in config/. The files are unescrow'd — edit them freely.


General (config/general.lua)

luaconfig/general.lua
Config.Debug    = false   -- print extra console output for troubleshooting
Config.Language = 'en'    -- 'en' | 'es'

Gangs (config/gangs.lua)

Controls global gang limits, the shared bank, the XP/level system, the CAD item, and the default rank hierarchy.

luaconfig/gangs.lua
Config.Gang = {
    MaxMembers = 20,   -- max members per gang
    MaxGangs   = 50,   -- max concurrent gangs on the server
 
    Bank = {
        Enable     = true,
        StartMoney = 0,
        MaxMoney   = 10000000,
    },
 
    LevelSystem = {
        Enable      = true,
        ExpPerLevel = 1000,  -- used only with 'flat' formula
    },
 
    CAD = {
        ItemName   = 'ilegal_cad',
        Price      = 500,       -- cost per additional CAD unit
        PayAccount = 'cash',    -- 'cash' | 'bank'
    },
}

Default rank permissions

When a gang is created, four ranks are automatically seeded: Leader, Co-Leader, Member, Recruit. The full permission list per rank is defined under Config.Gang.DefaultRanks. Available permission flags:

PermissionWhat it allows
inviteInvite new members
kickKick members
promote / demoteChange member rank
manage_bankFull bank management
withdraw / depositBank transactions
access_stashShared gang stash
access_personal_stashPersonal stash inside the gang UI
access_garageGang vehicle garage
access_clothingGang clothing room
manage_stashCreate / remove stashes
manage_vehiclesAdd / remove gang vehicles
manage_ranksEdit rank names and permissions
manage_locationsSet HQ and map locations
view_logsSee gang activity log
disbandDisband the gang
quick_searchF6 quick-search nearby players
quick_handcuffF6 handcuff shortcut
quick_vehicleF6 call gang vehicle
quick_radioF6 open radio tab

Labs (config/labs.lua)

luaconfig/labs.lua
Config.Labs = {
    Bucket = { Base = 42000 },    -- routing bucket base (base + lab_id per lab)
 
    Interactions = {
        EntryDistance  = 2.0,
        ExitDistance   = 2.0,
        LaptopDistance = 2.0,
    },
 
    RaidPoliceJobs = {
        ['police']  = true,
        ['sheriff'] = true,
    },
}

Lab types

Each lab type maps to a unique interior. Available types out of the box:

KeyLabel
weedWeed Lab
cokeCoke Lab
methMeth Lab
bunkerBunker
counterfeitCounterfeit Cash

Interior spawn and laptop coordinates are defined per type in Config.LabTypes.


Crafting (config/crafting.lua)

The crafting module has two independent level/XP ladders: Player Level and Gang Level.

luaconfig/crafting.lua
Config.Crafting = {
    PlayerLevel = {
        Formula           = 'linear',   -- 'flat' | 'linear' | 'exponential'
        BaseXP            = 500,
        IncrementPerLevel = 250,        -- only for 'linear'
        Multiplier        = 1.5,        -- only for 'exponential'
    },
 
    GangLevel = {
        Formula           = 'linear',
        BaseXP            = 1000,
        IncrementPerLevel = 500,
        Multiplier        = 1.6,
    },
}

Formula examples (PlayerLevel defaults)

Level upXP required
1 → 2750
5 → 61 750
9 → 102 750

Territories (config/territories.lua)

See the Territories page for a full breakdown of the presence system, reputation decay, passive income, and capture rules.


Drug Sales (config/drug_sales.lua)

See the Drug Sales page for NPC customer behavior, price configuration, blacklisted zones, and animations.


Radio (config/radio.lua)

luaconfig/radio.lua
Config.Radio = {
    ItemName = 'radio',      -- item required to use gang radio
 
    Frequencies = {          -- channel names shown in the F6 radio tab
        "Frequency 1",
        "Frequency 2",
        -- up to any number of channels
    },
 
    Voice = {
        Enabled         = true,
        Resource        = 'pma-voice',
        TalkKey         = 'LMENU',
        MuteToggleKey   = 'R',
        UseAnimation    = true,
        DefaultAnim     = 1,
    },
}

Logs (config_sv_logs.lua)

This file is server-only — it is never exposed to the client. It is safe to place real webhook URLs here.

Each event has its own Discord webhook. Leave any entry as "" to silently skip that event. Set Enabled = false to disable the whole system at once.

luaconfig_sv_logs.lua
BridgeConfig.Logs = {
 
    Enabled      = true,
 
    -- Embed appearance
    Username     = "Origen Ilegal | Logs",
    AvatarUrl    = "",           -- image URL for the webhook avatar (optional)
    DefaultColor = 0x2F3136,     -- default embed color
    Footer       = "Origen Network • %s",
 
    Webhooks = {
 
        -- BASIC — system operational events
        ["basic.stash_opened"]          = "",
        ["basic.armory_opened"]         = "",
        ["basic.garage_opened"]         = "",
        ["basic.wardrobe_opened"]       = "",
        ["basic.personal_stash_opened"] = "",
 
        -- USER — player actions inside the gang
        ["user.gang_created"]           = "",
        ["user.territory_assigned"]     = "",
        ["user.member_joined"]          = "",
        ["user.member_kicked"]          = "",
        ["user.member_promoted"]        = "",
        ["user.member_demoted"]         = "",
        ["user.member_rank_changed"]    = "",
        ["user.money_deposit"]          = "",
        ["user.money_withdraw"]         = "",
        ["user.location_set"]           = "",
        ["user.location_removed"]       = "",
        ["user.rank_created"]           = "",
        ["user.rank_updated"]           = "",
        ["user.rank_deleted"]           = "",
        ["user.rank_migrated"]          = "",
        ["user.vehicle_purchased"]      = "",
        ["user.vehicle_taken_out"]      = "",
        ["user.vehicle_stored"]         = "",
        ["user.vehicle_deleted"]        = "",
        ["user.vehicle_recovered"]      = "",
        ["user.cad_purchased"]          = "",
        ["user.quick_action"]           = "",
        ["user.store_buy"]              = "",
        ["user.store_sell"]             = "",
        ["user.craft_claim"]            = "",
        ["user.lab_cycle_complete"]     = "",
        ["user.lab_buy_storage"]        = "",
        ["user.lab_buy_table"]          = "",
        ["user.lab_buy_upgrade"]        = "",
 
        -- ADMIN — server administrator actions
        ["admin.create_gang"]           = "",
        ["admin.update_gang"]           = "",
        ["admin.delete_gang"]           = "",
        ["admin.set_gang_money"]        = "",
        ["admin.set_gang_level"]        = "",
        ["admin.set_gang_points"]       = "",
        ["admin.set_gang_status"]       = "",
        ["admin.update_gang_config"]    = "",
        ["admin.apply_sanction"]        = "",
        ["admin.remove_sanction"]       = "",
        ["admin.extend_sanction"]       = "",
        ["admin.grant_create_perm"]     = "",
        ["admin.revoke_create_perm"]    = "",
        ["admin.add_member"]            = "",
        ["admin.remove_member"]         = "",
        ["admin.create_announcement"]   = "",
        ["admin.delete_announcement"]   = "",
        -- ... (stores, labs, crafting, territories — see the file for the full list)
    },
}
CategoryPrefixDescription
Basicbasic.*System operational events (stashes, garages, wardrobe)
Useruser.*Player actions inside the gang panel
Adminadmin.*Server administrator actions from the admin panel

Admin Access (config/admin.lua)

Controls which players can open the admin panel and run admin commands.

luaconfig/admin.lua
Config.AdminAccess.Enabled          = false  -- true = use rank system below; false = bridge-only (original behaviour)
Config.AdminAccess.UseBridgeFallback = true   -- if no rank matches, fall back to IsFrameworkAdmin

When Enabled = true the resource evaluates, in order:

  1. ACE permissionsConfig.AdminAccess.AcePermissions (applies to all frameworks)
  2. Framework ranksConfig.AdminAccess.Ranks[framework]
  3. Bridge fallbackIsFrameworkAdmin (only if UseBridgeFallback = true)

Framework ranks

luaconfig/admin.lua
Config.AdminAccess.Ranks = {
    ['qb-core']  = { 'admin', 'mod', 'god' },
    ['qbx_core'] = { 'admin', 'mod', 'god' },
    ['esx']      = { 'admin', 'mod', 'superadmin' },
}
FrameworkCheck method
qb-coreQBCore.Functions.HasPermission(source, perm)
qbx_coreIsPlayerAceAllowed(source, perm)
esxxPlayer.getGroup() string comparison

ACE permissions

luaconfig/admin.lua
Config.AdminAccess.AcePermissions = {
    'group.admin',
    -- 'origen_ilegal.admin',
}

Any player allowed the listed ACE node is granted admin access regardless of framework. Useful for server.cfg ace assignments.

To add custom logic (Discord roles, database flags, ox_lib groups) without editing core files, override CustomAdminAccess.HasAccess in custom/server/admin_permissions.lua. See the Custom page for details.


Robbery Requests (config/robbery_request.lua)

Controls the robbery request module — the handshake system between the gang panel and origen_police.

luaconfig/robbery_request.lua
Config.RobberyRequest.Enabled               = true   -- enable/disable the entire module
Config.RobberyRequest.Permission            = 'request_robbery'
Config.RobberyRequest.Anonymous             = true
Config.RobberyRequest.PendingExpireMinutes  = 5
Config.RobberyRequest.ApprovedExpireMinutes = 15
KeyTypeDescription
EnabledbooleanToggle the module. The tab hides if origen_police is not started regardless of this value.
PermissionstringRank permission required to submit and cancel requests. Leaders always have it.
AnonymousbooleanIf true, the police panel sees "Anonymous" instead of the real gang name and requester.
PendingExpireMinutesnumberMinutes before a pending request auto-expires. 0 = no expiry.
ApprovedExpireMinutesnumberMinutes before an approved request auto-expires if the robbery is not started. 0 = no expiry.

Each robbery type is defined in Config.RobberyRequest.Requests. See the full breakdown on the Robbery Requests page.


Commands (config/commands.lua)

CommandDefault nameConfigurableRestricted
Open gang panel/gangorgYesNo
Create a gang/creategangYesNo
Open admin panel/gangadminNoYes — admin access required

The names of /gangorg and /creategang are fully configurable in config/commands.lua. /gangadmin is hardcoded and always uses that name — access is gated server-side using the rules defined in config/admin.lua.

luaconfig/commands.lua
Config.Commands = {
    Gang = {
        name       = 'gangorg',      -- rename freely
        help       = 'commands.gang.help',
        restricted = false,
    },
    CreateGang = {
        name       = 'creategang',   -- rename freely
        help       = 'commands.creategang.help',
        restricted = false,
    },
}

/gangadmin bypasses Config.Commands entirely — it is registered directly in client/admin.lua and validated against config/admin.lua on the server side.