Configuration

Convars and every option in data/obsi: core, interact, admin, rarity and staff.

Obsi Inventory reads its options from the upstream convars and from five files in data/obsi/. Values saved in the admin panel are stored in the database and take priority over the files.

Files

FileContents
data/obsi/core.luaSlot layout, player defaults, clothing, weight effects, throwing, plates, fast actions, ped camera
data/obsi/interact.luaGive, trade, world containers, target options, discovery, shops, weapon attachments
data/obsi/admin.luaAdmin command and key, roles, addon defaults, history, security
data/obsi/rarity.luaDefault rarities
data/obsi/staff.luaStaff identifiers (server side only)
locales/<lang>.jsonEvery string; English and Polish are complete

The upstream files (data/items.lua, data/shops.lua, data/stashes.lua, data/crafting.lua and the rest) keep their format.

Convars

The upstream convars still apply. The ones you usually set:

ConvarDefaultMeaning
inventory:frameworkesx, qbx, ox or nd
inventory:slots35Total player slots
inventory:targetfalseUse ox_target for shops and stashes
inventory:keys["F2", "K", "TAB"]Inventory, secondary inventory and hotbar keys

Use setr so the client can read them, for example setr inventory:slots 35.

core.lua

Slot layout

pockets = 5,      -- slots 1-5, hotbar keys 1-5
baseSlots = 25,   -- slots 6-25 always open; the rest needs a backpack

See Slots and backpacks.

Player defaults

The settings every new player starts with. Each player's own copy is stored on their client.

defaults = {
    accent = '#E5122E',          -- any hex / rgb() / hsl() colour
    secondary = '#121417',       -- console background colour
    theme = 'graphite',          -- graphite | carbon | slate
    sharp = true,                -- square corners
    font = 'Inter',              -- Inter | Segoe UI
    scale = 100,                 -- 70 to 130 %
    density = 'comfortable',     -- comfortable | compact
    clothingColumn = true,
    clothingSide = 'center',     -- left | center | right
    pedPreview = true,
    pedCamera = true,
    notifyStyle = 'compact',     -- compact | minimal
    streamer = false,
    sounds = true,
},

Other sections

KeyPage
clothingClothing
weightSlots and backpacks
throwThrowing
platesItems and rarity
fastActionsButtons in the FAST ACTIONS strip: hands up, undress, hanger, trade, give
itemrenameMax = 32, describeMax = 160
pedMode'clone' or 'pause', how the character copy is drawn
pedCamera fov = 40.0 and easeMs = 160
statusinterval = 500 ms between status updates while open

interact.lua

KeyPage
giveGive and trade
tradeGive and trade
searchSearch animation for dumpsters and trunks
targetExtra ox_target options for dumpsters, trunks, stashes and evidence when inventory:target is off
discoveryItems and rarity
shopShops
attachmentsWeapon attachments

admin.lua

admin = {
    command = 'invadmin',        -- false = no command
    key = nil,                   -- e.g. 'F10'
    superAce = 'group.admin',    -- players with this ace get every page
    rateLimit = { calls = 30, window = 3000 },
    roles = { ... },             -- see Permissions
},

History

history = {
    enabled = true,
    retentionDays = 30,      -- 0 = keep forever
    flushInterval = 5000,    -- ms between batched inserts
    maxBuffer = 500,
    ignore = {},             -- e.g. { open = true, close = true }
},

Security

SettingDefaultMeaning
autoKickfalseDrop players on severe reports
distanceChecktrueReport opens and drops from too far away
maxDistance10.0Metres for that check
emergencyLockfalseBlocks every inventory from opening (never saved)
retention100Reports kept in memory for the Security page
imageHostsr2.fivemanage.com, i.fmfile.comHosts allowed for item image URLs
severemalformed, locked_slot, exploitReport kinds treated as severe

logHookRejections, trimPlates, logLevel and evidenceGrade are live copies of the matching upstream convars.

Addon defaults

features holds the default state of every addon on the Addons page. The default applies until an admin flips the switch; from then on the database value is used.