Slots, Logging & Commands
Slots, Logging & Commands
Character slots
Every player gets a base number of slots, set in settings/options.lua:
defaultSlot = 6,Bonus slots can be layered on top via 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:
tebexShopImport = true,set sv_tebexSecret "your-tebex-secret-key"How it works:
- On start the module creates a
bupa_slotstable automatically. - Your Tebex package command feeds transactions in through the fixed
addNewCharacterSlotcommand (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:
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:
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.