Skip to content

Slots, Logging & Commands

Slots, Logging & Commands

Character slots

Every player gets a base number of slots, set in settings/options.lua:

settings/options.lua
defaultSlot = 6,

Bonus slots can be layered on top via settings/access.lua:

settings/access.lua
Server.extraSlots = {
    -- Per-license bonus slots
    list = {
        -- { license = 'license:xxxxxxxx...', slot = 1 },
    },
    -- Per Discord-role bonus slots (needs the relay bot convars)
    discordRoles = {
        -- { id = 'DISCORD_ROLE_ID', slot = 1 },
    },
    -- Licenses allowed to delete when deleteButtonForEveryone is off
    deleteCharacterAccess = {
        -- 'license:xxxxxxxx...',
    },
}

Discord-role slots need a relay bot. Add bpx_relay_hook_GUILD_ID and bpx_relay_hook_BOT_TOKEN to server.cfg; the bot must be in your guild with the Server Members Intent enabled. On boot the console prints exactly what's missing if the roles are configured but the credentials aren't.

Tebex slot import

Sell extra slots as Tebex packages. Enable it and provide your Tebex secret:

settings/options.lua
tebexShopImport = true,
server.cfg
set sv_tebexSecret "your-tebex-secret-key"

How it works:

  • On start the module creates a bupa_slots table automatically.
  • Your Tebex package command feeds transactions in through the fixed addNewCharacterSlot command (do not rename it).
  • A player redeems a transaction id (format tbx-...) from the shop UI; redemption is rate-limited (5 attempts, 60s cooldown) and each transaction can be claimed once. Claimed slots are tied to the player's license.

If sv_tebexSecret is unset, the Tebex module logs a warning and disables itself.

Deletion

Who may delete their own characters is controlled by deleteButtonForEveryone in settings/options.lua:

settings/options.lua
deleteButtonForEveryone = true,

When false, only licenses listed in extraSlots.deleteCharacterAccess can delete. When a character is deleted, its rows are wiped across every table mapped in Server.deletionTables (settings/access.lua) — properties, bank accounts, vehicles, phone data, outfits and more — keyed by citizenid.

Discord logging

Per-event webhooks are configured in settings/access.lua. Leave a value as '' to silence that channel:

settings/access.lua
Server.webhooks = {
    playgame        = 'https://discord.com/api/webhooks/...',
    logout          = 'https://discord.com/api/webhooks/...',
    exploit         = 'https://discord.com/api/webhooks/...',
    createcharacter = 'https://discord.com/api/webhooks/...',
    deletecharacter = 'https://discord.com/api/webhooks/...',
    tebex           = '',
}
Channel Logged event
playgame A player entered the world on a character.
logout A player logged out of a character.
exploit A suspicious / rejected request (anti-cheat).
createcharacter A new character was created.
deletecharacter A character was deleted.
tebex A Tebex slot transaction was redeemed.

Commands

Command Access Purpose
/logout Admin by default Logs out of the current character and reopens the selector. Flip the in-file logoutForEveryone flag to make it available to everyone.
/forcepartner [citizenid] [cp|bff] Admin Force a partner pairing without an invite.
/migratecid Admin Recalculates per-license cid values across the players table.
/getbucketCheck Admin Prints the caller's current routing bucket (debug utility).

There is no /partnerinvite command. Partner invites are sent from the character-selector menu only. /forcepartner remains the admin-only override.