Skip to main content
All user-tunable settings live in shared/config.lua. The file is split into 18 numbered sections - search by number to jump to a section.
Apartments themselves, motel groups, and NPC positions are managed in-game via /aptmanager - not via config edits.

Section 1 - Framework

string
default:"qbox"
Which framework to integrate with.
string
default:"ox"
Which inventory script handles the apartment stash.

Inventory options

Base esx_inventory alone (without esx_addoninventory) has no shared-inventory backend and is not supported. Install one of the listed combinations.
To add a custom inventory not in this list, edit server/inventory.lua and client/inventory.lua - those are the only two files you need to touch.
string[]
default:"{\"police\",\"sheriff\",\"swat\"}"
Job names treated as law enforcement. Used for PD door entry and MLO item unlock.
boolean
default:"false"
Verbose console logging + enables /aptbill debug command. Disable for production.

Section 2 - Motel

spawnPos is the fallback exterior spawn for players who decline the “spawn inside” prompt or whose apartment can’t be entered.

Section 3 - Tiers

Tier 1 is always free regardless of monthlyCost. New characters are always assigned to a free Tier 1 slot.
You can add more tiers ([4], [5], …) - the admin panel auto-detects them.

Section 4 - Billing

Rent cycle

  1. Player upgrades to Tier 2+ via a motel NPC → pays transfer fee + first month’s rent
  2. A billing record is created in awoken_apartment_billing with next_bill_date = now + 30 days and slot_index
  3. Every checkInterval seconds (and once on login), the server checks if rent is due
  4. If yes + can pay: deduct rent, reset next_bill_date to now + 30 days
  5. If yes + can’t pay:
    • Try a free Tier 1 in the same motel → move them there
    • If none → “pay now or be moved” prompt
    • Decline → move to any free Tier 1, or fully evict if none exist

Slot persistence

While billing is active (next_bill_date in the future):

Transfers between motels

SQL schema (auto-created)

identifier = citizenid on qbox/qbcore, license on ESX.

Manual fixes

Restart resource - they’ll fall to a free Tier 1 on next connect.
With Config.Debug = true:

Section 5 - New Character Spawn

boolean
default:"true"
Universal mode - bypass any spawn selector, force-teleport new characters directly inside their assigned apartment.
boolean
default:"false"
Only used when forceSpawnInApartment = false. Shows an “enter your apartment?” dialog.
number
default:"2000"
Milliseconds before the prompt fires (ignored when forceSpawnInApartment = true).

New character detection by framework

Manual trigger works on any framework:

Section 5b - Spawn Selector Integration

Got a spawn selector? (That’s the screen where players pick where to spawn - qbx_spawn, qb-spawn, um-spawn, etc.) This section makes Awoken play nice with it instead of force-teleporting new characters straight into their apartment.
string
default:"auto"
Which spawn selector you use. 'auto' figures it out for you (recommended). Only set it by hand if auto-detect guesses wrong: 'none', 'qbx_spawn', 'qb-spawn', 'um-spawn', 'vms_spawnselector', 'okokSpawnSelector', 'lc_spawnselector', or 'esx_skin'.
boolean
default:"true"
When true and a spawn selector is found, Awoken stops force-spawning new characters and lets your selector decide where they go. They still get assigned a room quietly in the background.
boolean
default:"true"
When true, your spawn selector is allowed to offer the player’s apartment as one of the spawn choices. Set it to false to hide the apartment from the selector completely.
Out of the box (deferToSelector = true) this just works - new characters go through your spawn selector like normal. You only need the extra setup below if you want “My Apartment” to actually show up as a pick inside the selector.

Making the apartment show up as a spawn choice

Listing the apartment in the selector’s menu needs a small one-time patch to your spawn selector (it has to ask Awoken for the player’s room). Step-by-step patches for each popular selector are in Installation → Spawn selector coexistence.
In those patches, always send players inside with TriggerEvent('awoken_apartments:teleportInside', slotId) - not animateEnter. The animation version gets cut off by the spawn screen’s fade and the player never actually teleports.

Section 6 - Doors & Doorbell

Marker colour is automatically derived from the awoken:primaryColor convar.

Section 7 - Keys

Section 8 - Stash

The prefix is prepended to the resident’s identifier to form the unique stash ID (e.g., awoken_stash_ABC1234).

Section 9 - Blips

Section 10 - /aptshow Command

/aptshow drops a temporary blip + 3D marker on the player’s own apartment door.

Section 11 - Motel NPC Blips

Each motel group’s clerk NPC gets a unique blip colour cycled from the list (groups sorted alphabetically for consistency).

Section 12 - Animations

Each action (lock, enter, exit, transfer) uses lib.progressBar with the matching duration + animation.

Section 13 - MLO Support

boolean
default:"true"
Auto-hook ox_inventory and qb-inventory so the pdItem triggers MLO door unlock for police. For other inventories, fire TriggerClientEvent('awoken_apartments:usePdItem', src) from your item-use callback.

Section 14 - Police Access

Set item = '' to remove the item requirement entirely. Set knock.enabled = false to skip the knock animation and go straight to the access request.

Section 15 - Discord Logging

Webhooks can point at the same or different channels.

Section 16 - Locale

Section 18 - Locale Strings

All in-game text lives under Config.Locales[Config.Locale]. To add a translation:
Keep the %s placeholders in place - they’re filled in by the script with dynamic values like apartment labels and prices.

Primary colour convar

In your server.cfg:
This drives the accent colour for:
  • All 3D world markers (door zones, stash markers, /aptshow chevron)
  • The admin panel UI (tabs, buttons, borders, glow)
Change the convar and restart the resource - everything re-themes.

Wardrobes & clothing

Awoken Apartments does not come with its own wardrobe or clothing menu. That’s on purpose - it keeps out of your appearance system so the two never clash. If you want players to change outfits inside their apartment, you add the wardrobe yourself using your own clothing script (illenium-appearance, fivem-appearance, qb-clothing, etc.). The normal way is to add a small interaction point inside the apartment interior that opens your clothing menu. Here’s the shape of it using ox_target:
1

Get the interior coordinates

In /aptmanager, the interior spawn point is set per room (MLO) or per tier (IPL). Use those same coords for the wardrobe spot. Stand where you want it and read off your position, or grab it with the panel’s 🎯 Pick.
2

Swap in your clothing script's command

Replace the exports['illenium-appearance']:openOutfitMenu() line with whatever your clothing script uses to open its wardrobe - check that script’s own docs for the exact export or event name.
3

Put it in your own resource

Add the code to one of your own resources (or your clothing script’s config), not inside the encrypted awoken files. Restart it and the wardrobe point appears.
IPL apartments share one interior per tier (each player is isolated in their own routing bucket), so a single wardrobe point at that interior covers every room of that tier automatically. MLO apartments each have their own physical interior, so add one per MLO.