The Two Windows#
Almost everything in Apartments happens where the player stands — a prompt at a door, a small menu, a keypad. Two full windows exist, and it helps to know which is which:
Window | Opened with | What it is for |
|---|---|---|
The decoration menu |
| Buying, placing, putting away and selling furniture. |
The Furniture Creator |
| Adding new pieces to the furniture catalogue in game, with their own thumbnail. |
Everything an apartment holds — who owns it, its points, vault codes and furniture — is saved to the database the moment it changes. Buildings, shells, prices and behaviour are set in
config/main.luaandconfig/furniture.lua.
What a Fresh Server Opens With#
Five buildings, each a front door in the city with its own blip and its own interior tier:
Building | Key | Interior | Price |
|---|---|---|---|
South Rockford Drive |
| Tier 1 · | $5,000 |
Morningwood Blvd |
| Tier 2 · | $5,000 |
Integrity Way |
| Tier 3 · | $5,000 |
Tinsel Towers |
| Tier 4 · | $5,000 |
Fantastic Plaza |
| Tier 1 · | $5,000 |
A player owns one apartment at a time. Once they have one, every building shows on their map — their own with a different icon from the rest. Each apartment gets an ID made of its building and a number, such as sr_drive_a4821, and a label such as South Rockford Drive 4821.
Getting an Apartment#
Way | How it works |
|---|---|
At spawn | A new character picks a building in Multicharacter, qb-spawn or the Qbox menu, gets the apartment for free and is walked straight in — where the character creator opens. See Integrations. |
| Opens the Apartment Menu for a player with no apartment yet. Choosing a building gives it to them and charges its price to the bank. A player who already has one is told You already have an apartment. |
At the door | Move Apartment in a building's entrance menu charges that building's price to the bank — buying a first apartment, or moving an existing one there. |
Apartments are always paid from the bank. Config.MoneyType only decides what furniture is paid from.
Moving#
At any building other than their own, a player sees Move Apartment — Move your apartment to another house. Moving charges that building's price and takes the apartment there, under the same ID.
The Entrance#
Walk up to a building's door and the prompt Press [E] to open entrance menu appears. The Entrance Menu offers:
Option | Shown to | Does |
|---|---|---|
Enter Apartment | The owner of an apartment in this building | Goes inside. |
Move Apartment | Everybody else | Buys an apartment here, or moves theirs here. |
Ring Doorbell | Everybody | Lists who is home in this building — see Visitors below. |
With Config.UseTarget = true the same options are on the door as target entries, sized by each building's area.
Inside the Apartment#
Entering fades the screen, builds the interior for that visit and stands the player at its door. Each apartment has its own routing bucket, so the street and its players are not in your world while you are home. Weather and time sync are paused inside and come back when you leave. A player who logs out at home logs back in at home.
Prompt | Where | Does |
|---|---|---|
| At the door | Back out to the street, at the building's entrance. |
| At the door, after the bell rang | Lets the visitor in. |
| At the stash, or a storage piece | Opens it, or manages its vault code. |
| At the wardrobe, or a wardrobe piece | Opens the player's outfits. |
| At a piece of junk | Sweeps it up. |
With Config.InteractInDoor = true, the owner also gets a shortcut at the door, on H, to the points menu described next.
The stash, the wardrobe and the charger#
A new apartment has none of the three: the owner puts each one where they want it. /ApartmentLocation opens Apartments Location; pick a point, walk to the spot and press G — Press G to set the location. Running it again moves the point.
Point | What it opens |
|---|---|
Stash | The apartment's stash, through your inventory: 30 slots and 1,000,000 weight by default ( |
Wardrobe | The player's saved outfits, through the detected clothing script. |
Charge | A phone charging spot, handed to your phone script — see Integrations. |
Vault Codes#
Any stash — the apartment's own, or a piece of storage furniture — can be locked with a vault code. At the stash press G (Set Vault Code with a target) to open Vault Management:
Set Vault Code — type four digits on the keypad and press Confirm. The keypad also takes the number keys,
BACKSPACE,ENTERandESC.Remove Code — unlocks it again. Greyed out while there is no code.
From then on anyone opening that stash is asked for the code first, and a wrong one is refused with Invalid vault code. An apartment holds up to 10 codes across all its stashes; add Config.MaxVaultCodes = 20 to config/main.lua to allow more.
Stash names, for your inventory's admin tools: the apartment's stash is named after the apartment ID (
sr_drive_a4821); a storage piece isapartment_objectfollowed by its furniture ID. Dashes become underscores.
Visitors#
Ring the bell
At the entrance, Ring Doorbell lists every apartment in that building with somebody inside, by label. Pick one to ring it. With nobody home: Nobody is home.
Answer the door
Everyone inside hears the bell and reads Bell rang. A resident walks to the door and presses
G— or picks Doorbell with a target.Come in
The visitor is brought inside, as long as they are still within 5 metres of the entrance.
A visitor is in the same apartment as the resident: anything without a vault code is open to them. That is what codes are for.
Decorating#
Press F9 inside an apartment, or type /ApartmentDecoration. The camera lifts off the player and the decoration menu opens, with music. Players can rebind the key in the game's Settings → Key Bindings → FiveM.
One person decorates an apartment at a time. Anybody else is told Decoration is not available, someone using it.
It will not open while a cleaning robot is away from its dock.
The three tabs#
Tab | What it shows |
|---|---|
Dynamic | A picture of each room — kitchen, bathroom, bedroom, living room, garden — with its furniture categories drawn in place. Click a category to list its pieces. |
Objects | All 40 categories as a grid. Select several at once — or none, to list everything — and filter them with Search category. |
Stash | Everything you own in this apartment, placed or put away. Select a piece in the list — or click it in the room — to manage it. |
The search bar at the top, Search Furniture Items, matches names, descriptions, colours and model names. Pieces marked Interactive do something once placed. The ⓘ button opens Controls and Help.
Buying a piece#
Click a piece and a preview appears about five metres in front of the camera. Pick a colour under Select Color, move it where you want it, then press Buy - $price (or ENTER) and Confirm. The money is taken from cash — or the bank with Config.MoneyType = 'bank' — and the piece is saved where it stands. Short of money, the preview is removed with You don't have enough money!.
Moving pieces#
There are two ways to move a piece, switched with M: mouse mode, the default, where the piece follows the cursor while you hold the left button; and the gizmo, arrows and rings on the piece that you drag — Translate or Rotate under Edit Mode.
Key | Does |
|---|---|
Left mouse, held | Mouse mode: drag the piece across floors and walls. |
| Switch between mouse mode and the gizmo. |
| Gizmo: switch between Translate and Rotate. |
| Gizmo: switch between world and local axes. |
| Put the piece on the ground. |
| Show or hide the cursor. |
| Hide the menu for a clear view, and give the keys back to the game. |
| Free camera on or off. |
| Gizmo with the free camera: keep the camera on the selected piece. |
| Buy the piece you are holding. |
| Close the menu. A piece you have not bought is discarded. |
Managing what you own#
In the Stash tab, select a piece and Furniture Management opens above the list:
Button | Does |
|---|---|
Put in Stash | Takes the piece out of the room and keeps it; press again to bring it back. It reads In Stash or Not In Stash. This furniture store is separate from the item stash. |
Sell Furniture | Sells the piece for 30% of its price ( |
Save Location | Saves where you have moved your pieces to. |
Interactive furniture#
Kind | Once placed |
|---|---|
Storage | Fridges, kitchen units, hanging cabinets, bedside tables, washing machines and some tables open a stash of their own, with their own size and their own vault code. |
Wardrobes | Open the player's outfits, like the wardrobe point. |
Lights | The Spotlight in the Light category shines where it points, at |
Doors | Swing open and shut with |
Cleaning robot | Cleans the apartment by itself — see below. |
Your own | A piece given an |
Furniture is spawned for players within Config.SpawnDistance (100 metres) and fades in as they arrive.
Junk and the Cleaning Robot#
With Config.Cleaning = true, an apartment gets dirty while somebody is in it. Every 10 minutes a piece of dust or rubbish appears near the door, up to 10 at a time. The clock only runs while at least one player is inside, junk stays where it fell between visits, and anything older than seven days is cleared by the server.
The owner cleans a piece by walking up to it and pressing E — [E] - Clean. A broom comes out and three seconds later it is gone: You cleaned the junk.
Config.Cleaning = true
Config.JunkObjects = { 'qs_dust_prop_01', 'qs_garbage_prop_01', 'qs_garbage_prop_02', 'qs_garbage_prop_03' }
Config.JunkObjectTime = 10 * 60 * 1000 -- how often a new piece appears, in ms
Config.MaxJunkPerHouse = 10 -- the most an apartment holds at onceThe cleaning robot#
The Cleaning Robot ($550, five colours) is in the living room's furniture. Place it inside the apartment and it sits on its dock. At the dock press E — [E] Start Robot, or Start Cleaning Robot with a target — and it sets off: it follows the walls, turns towards any rubbish it can see and sweeps it up. It drives back to its dock when you stop it ([E] Stop Robot) or after five minutes.
Everyone in the apartment sees it move; only the player who started it controls it — anyone else is told This robot is already being used by someone.
Decorating waits until it is back on its dock.
It is put back on its dock when the player who started it leaves the apartment or disconnects.
Config.CleanerRobot = {
moveSpeed = 0.012, -- base speed
maxSpeed = 0.024, -- top speed
junkDetectRadius = 1.0, -- how close it must get to pick something up
maxDistanceFromDock = 12.0, -- keeps it inside the apartment
cleaningTimeout = 5 * 60 * 1000, -- back to the dock after this long
wobbleEnabled = true, -- a slight wobble, for realism
}The Furniture Creator#
Admins add furniture without touching config/furniture.lua. Type /apartmentfurniture: the left side lists the categories with their counts, and each has a + that starts a new piece in it. Pieces already created in game are listed under their category for editing.
Tab | Fields |
|---|---|
Basic Info | Object Name (the model — it must exist in your game), Label, Description, Price, Color Label, with a Live Preview of the card players will see. |
Advanced | Image (a URL, or the camera button), Stash with Slots and Max Weight, or Wardrobe — one or the other — and Position Offset, where the prompt sits on the piece. |
Colors | Color Variations: each with its own model, label, price, and stash or wardrobe. |
Create saves it to the database and every player has it in the decoration menu at once — no restart. A model can only be in a category once, and only pieces made in game can be deleted here; pieces from config/furniture.lua are edited in that file. New categories are added in the file too.
The photo booth#
The camera button next to Image takes the thumbnail for you. The window closes and you are looking at the piece in a green studio:
Key | Does |
|---|---|
| Move the piece. |
| Raise and lower it. |
| Turn it. |
Mouse wheel | Zoom. |
| Take the picture. |
| Cancel. |
The picture is uploaded to FiveManage with the token in config/fivemanage.lua, and the creator reopens with its address filled in. It needs screenshot-basic; on slow machines raise Config.FurniCreator.interval (milliseconds before the shot).
Adding a Building#
Buildings are entries in Config.ApartmentCatalog in config/main.lua. The key is the building's ID: lowercase, no spaces, and never renamed once players own apartments there. Stand at the new door in game to take your own coordinates — the ones below are only an example.
['vespucci_canals_f'] = {
name = 'vespucci_canals_f', -- the same as the key
label = 'Vespucci Canals', -- menus and the blip
image = 'https://...', -- shown by spawn selectors
description = 'A quiet flat by the water.',
price = 7500, -- charged to the bank
tier = 2, -- which entry of Config.Shells
coords = { enter = vector4(-1086.0, -1270.0, 5.6, 210.0) }, -- the street door
area = { heading = 210, minZ = 4.5, maxZ = 7.5, debug = false, length = 1, width = 2, distance = 2.0, created = false },
},area is the box players aim at with a target; created must stay false. Restart the resource and the building is on the map, in /Apartment and in the spawn selectors.
Shells and Exit Doors#
An interior is a shell model from Config.Shells, chosen by the building's tier. Every copy is spawned at Config.ShellSpawnCoords, out of sight, once per visit.
Config.Shells = {
[1] = { model = 'shell_v16low' },
[2] = { model = 'shell_office1' },
[3] = { model = 'shell_v16low' },
[4] = { model = 'shell_v16mid' },
[5] = { model = 'shell_michael' }, -- a new tier
}The K4MB1 Starter Shells pack streams 16 models you can use: container_shell, furnitured_midapart, modernhotel_shell, shell_frankaunt, shell_garagem, shell_lester, shell_michael, shell_office1, shell_ranch, shell_store1, shell_trailer, shell_trevor, shell_v16low, shell_v16mid, shell_warehouse1, standardmotel_shell. Any other shell works the same once it is streamed. The stash value beside each shell in the shipped file is not read — the apartment stash is Config.DefaultStashData.
Placing an exit door#
Each tier needs to know where its door is. That is kept in shell_offsets.json, and tiers 1 to 4 ship with theirs. For a new tier, the first person to enter a building of that tier sees No exit coords found and a camera over the empty shell — so do it yourself before players get there:
Aim at the spot
Fly with
WASD,Q/Eand the mouse. A ghost of your character stands where the camera points, inside the shell by the door.Face it the right way
Z/Xturn the ghost: that is the way players face when they arrive.Save it
ENTERsaves it — the point must be inside the shell — andBACKSPACEcancels. It is written toshell_offsets.jsonand sent to every player at once. Enter again and you arrive at the door.
To move an existing door, delete that tier's entry from shell_offsets.json, restart, and place it again.
The Settings#
The rest of config/main.lua, with the shipped values. A change needs restart qs-apartments.
Setting | Default | Effect |
|---|---|---|
| false | Target entries instead of prompts. |
| true | qb-spawn offers the buildings to a character with no apartment. |
| 'money' | What furniture is paid from: |
| 0.3 | Share of the price paid back when a piece is sold. |
| 30 slots, 1,000,000 | The apartment stash, and any storage piece without its own size. |
| 'decorate' · 0.05 | Music in the decoration menu. |
| 'F9' | Default key for the decoration menu. Players who already joined keep their own binding. |
| 100.0 | How close a player must be for furniture to spawn. |
| 20.0 | Brightness of placed spotlights. |
| true | Placed doors swing. Needs |
| false | A shortcut to the points menu at the apartment door. |
| vec4(279.46, 335.1, 98.57, 67.26) | Where interiors are built. Change it only together with |
| en-US, USD | How prices are written in the menus — locale, currency, decimals. |
| look 500, move 10 | Free camera speeds while decorating and placing doors. |
| — | The game control codes behind every key above, if you need to move one. |
HideRadarInDecorate,ModernDecorateModeandFreeModeKeysinconfig/main.lua, andFurnitureShopsandIllegalFurnituresinconfig/furniture.lua, are not read by Apartments. Changing them does nothing.



