Docs

kyoEmpireBuilder

Configuration

All configuration lives in the config/ folder. None of these files is encrypted.

FileContents
config/config.luaGeneral, admin, currencies, organizations, ranks, treasury, levels, XP, lab slots, interaction, police
config/config_labs.luaInteriors, lab types, upgrades, production, lab shop, missions, street sales, heat, lending, quality, wars, contracts. See Labs and production and Sales, police and wars
config/config_integrations.luaInventory, stash, garage, wardrobe, dispatch. See Integrations
config/config_server.luaDiscord webhooks (server only)

General

Config.Framework = 'auto'      -- 'esx' | 'qb' | 'qbox' | 'auto'
Config.Locale = 'en'           -- 'en' | 'es' | 'de' | 'fr' | 'it' | 'pt'
Config.AutoInstallSQL = true   -- create / update the tables on start
Config.NotifySystem = 'kyoNotify' -- 'default' | 'kyoNotify' | 'okok_notify' | 'vms_notifyV2'
Config.Debug = false
Config.AccentColor = '#E8B04B' -- accent colour of the interface

Admin

Config.Admin = {
    Commands = { 'admineb', 'adminempirebuilder' },
    AcePermission = 'kyo.empire.admin',
    Identifiers = {
        -- 'license:xxxxxxxx',
    },
}

A player is an admin if they have the ACE permission or one of the listed identifiers (license:, steam:, discord:…).

Currencies

Every price in the script points to a currency by its key.

Config.Currencies = {
    cash  = { type = 'account', name = 'money',       label = 'Cash' },
    bank  = { type = 'account', name = 'bank',        label = 'Bank' },
    dirty = { type = 'account', name = 'black_money', label = 'Dirty money' },
    -- vip_item   = { type = 'item', name = 'vip_coin', label = 'VIP coins' },
    -- vip_export = { type = 'export', resource = 'kyoVip', get = 'GetCoins', remove = 'RemoveCoins', label = 'VIP coins' },
}
TypeMeaning
accountA framework account. Use the ESX names (money, bank, black_money); on QBCore / Qbox they are translated with Config.QBMoney
itemAn inventory item, for example a VIP coin
exportAnother resource. get(src) must return a number and remove(src, amount) must return true / false

QBCore / Qbox money

Config.QBMoney = {
    money = 'cash',
    bank = 'bank',
    black_money = 'crypto',
}

Use a money type (cash, bank, crypto) or 'item:<name>' for an inventory item, for example black_money = 'item:black_money' with ox_inventory.

Organizations

Config.Orgs = {
    Purchasable = true,     -- false = only admins create organizations
    Price = 500000,
    Currency = 'bank',

    BuyAtNPC = true,        -- buy at the NPC
    BuyCommand = 'buyorg',  -- false = no command, NPC only

    ShopNPC = {
        model = 'a_m_m_hasjew_01',
        coords = vector4(-1.3542, -1814.5032, 29.1500, 228.0),
        scenario = 'WORLD_HUMAN_STAND_IMPATIENT',
        blip = { enabled = true, sprite = 500, color = 2, scale = 0.75, label = 'Underground Contact' },
    },

    NameMinLength = 3,
    NameMaxLength = 24,

    PanelCommand = 'org',   -- false = the panel only opens at the boss point

    BossPoints = { ... },   -- see below

    MaxMembers = 30,
    InviteTimeout = 60,     -- seconds to accept an invite

    DefaultRanks = { ... }, -- ranks created with every new organization
    MaxRanks = 10,
}

Fully IC servers: set BuyCommand = false and PanelCommand = false. Organizations are bought at the NPC and the panel only opens at the boss point.

Boss points

Lets the owner decide whether bosses can create, move and delete their own points (boss panel, stash, garage, wardrobe).

BossPoints = {
    Enabled = true,                -- false = only admins place points
    Types = { 'boss', 'stash', 'garage', 'wardrobe' },
    OnePerType = true,             -- one of each type outside, and one of each inside every lab
    InsideLabs = true,             -- bosses can also place points inside their own labs
    Price = 25000,                 -- cost to place or move a point, from the treasury (0 = free)
    MinDistanceOtherOrgs = 25.0,   -- metres away from other organizations' points (0 = no limit)
    Command = 'org',               -- used only when PanelCommand = false
},
  • With PanelCommand set, the boss gets a Points tab in the panel.
  • With PanelCommand = false, Command opens only the points screen, and only for bosses. This lets a boss who bought the organization at the NPC place the first boss point without an admin. Set it to false too and an admin has to place the first boss point.
  • Points are placed where the boss stands. Moving costs the same as placing; deleting is free.
  • A point cannot be moved between outside and a lab. It has to be deleted and placed again.

Default ranks

DefaultRanks = {
    { name = 'Boss',      boss = true },
    { name = 'Lieutenant', perms = { 'invite', 'kick', 'lab_enter', 'lab_collect', 'lab_supplies', 'lab_upgrade', 'stash', 'garage', 'wardrobe', 'treasury_deposit', 'missions', 'war_assault' } },
    { name = 'Soldier',   perms = { 'lab_enter', 'lab_collect', 'lab_supplies', 'stash', 'garage', 'wardrobe', 'treasury_deposit', 'missions', 'war_assault' } },
    { name = 'Recruit',   perms = { 'lab_enter', 'wardrobe', 'missions' } },
},

The boss rank has every permission. The boss can edit, create and reorder ranks later.

Rank permissions

PermissionAllows
inviteInvite players
kickKick members
manage_ranksCreate, edit and reorder ranks
lab_enterEnter the organization’s labs
lab_collectCollect product
lab_suppliesAdd supplies (ingredients or purchase)
lab_upgradeBuy lab upgrades
lab_lendLend labs to other organizations
lab_buyBuy and sell labs
stashUse the stash
garageUse the garage
wardrobeUse the wardrobe
treasury_depositDeposit into the treasury
treasury_withdrawWithdraw from the treasury
missionsStart supply and sale missions
war_declareDeclare war
war_assaultForce and loot rival labs during a war

Treasury

Config.Treasury = {
    Currency = 'dirty',  -- account used for deposits and withdrawals
    MinDeposit = 1000,
}

Levels and XP

Config.Levels = {
    { xp = 0,       maxLabs = 1 },
    { xp = 2500,    maxLabs = 1 },
    { xp = 7500,    maxLabs = 2 },
    -- ...
    { xp = 400000,  maxLabs = 6 },
}

Config.XP = {
    PerProduct = 1,          -- per unit produced
    PerSaleMission = 150,
    PerStreetSale = 4,
    PerSupplyMission = 120,
    Territories = {          -- kyoGangTerritories (optional)
        Enabled = true,
        Resource = 'kyoGangTerritories',
        PerZonePerHour = 60,
    },
}

maxLabs is how many lab slots an organization may open at that level. Opening a slot is paid:

Config.LabSlots = {
    Currency = 'dirty',
    Prices = { 0, 750000, 1500000, 3000000, 5000000, 8000000 },
}

kyoGangTerritories

An admin links an organization to a gang (job name) in Admin panel > Organizations. Every hour the organization earns PerZonePerHour XP for every zone that gang holds.

Interaction

Config.Target = 'auto'         -- 'auto' | 'ox_target' | 'qb-target' | 'none' (E key)
Config.InteractKey = 38        -- E
Config.DrawDistance = 12.0
Config.InteractDistance = 1.6
Config.Marker = { type = 1, size = vector3(0.8, 0.8, 0.35), color = { 232, 176, 75, 140 } }

Police

Config.Police = {
    Jobs = { 'police', 'sheriff' },
    RequireDuty = true,        -- QBCore / Qbox on-duty flag (ESX has none)
    RamItem = 'police_ram',
    BreachTime = 12,           -- seconds
}

Config.ExcludedJobs = { police = true, sheriff = true } -- never see criminal blips

Discord webhooks

config/config_server.lua is loaded only on the server.

Config.Webhooks = {
    Name = 'kyoEmpireBuilder',
    Avatar = '',
    Urls = {
        orgs = '',      -- organizations, members, ranks
        treasury = '',  -- deposits, withdrawals, purchases
        labs = '',      -- labs bought / sold / upgraded, production collected
        lending = '',   -- lending offers and agreements
        missions = '',  -- supply / sale missions and stolen cargo
        police = '',    -- raids
        wars = '',      -- wars and assaults
        admin = '',     -- everything done from /admineb
    },
}

Leave a URL empty to disable that category.