Using Apartments on FiveM: buying and moving, the interior, stash vault codes, doorbell visitors, the furniture decorator, junk and the cleaning robot, the Furniture Creator, buildings and shells.
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
F9 or /ApartmentDecoration, inside an apartment
Buying, placing, putting away and selling furniture.
The Furniture Creator
/apartmentfurniture, admins only
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.lua and config/furniture.lua.
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
sr_drive_a
Tier 1 · shell_v16low
$5,000
Morningwood Blvd
morningwood_blvd_b
Tier 2 · shell_office1
$5,000
Integrity Way
integrity_way_c
Tier 3 · shell_v16low
$5,000
Tinsel Towers
tinsel_towers_d
Tier 4 · shell_v16mid
$5,000
Fantastic Plaza
fantastic_plaza_e
Tier 1 · shell_v16low
$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.
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.
/Apartment
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.
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.
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
[E] - Exit apartment
At the door
Back out to the street, at the building's entrance.
[G] - Open door
At the door, after the bell rang
Lets the visitor in.
[E] - Open stash · [G] - Set Vault Code
At the stash, or a storage piece
Opens it, or manages its vault code.
[E] - Open wardrobe
At the wardrobe, or a wardrobe piece
Opens the player's outfits.
[E] - Clean
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.
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 (Config.DefaultStashData).
Wardrobe
The player's saved outfits, through the detected clothing script.
Charge
A phone charging spot, handed to your phone script — see Integrations.
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, ENTER and ESC.
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 is apartment_object followed by its furniture ID. Dashes become underscores.
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.
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.
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.
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!.
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. Z / X turn it while you hold it.
M
Switch between mouse mode and the gizmo.
K
Gizmo: switch between Translate and Rotate.
Q
Gizmo: switch between world and local axes.
G
Put the piece on the ground.
F5
Show or hide the cursor.
F6
Hide the menu for a clear view, and give the keys back to the game.
F3
Free camera on or off. WASD fly, Q / E go down and up, the mouse looks around.
F
Gizmo with the free camera: keep the camera on the selected piece.
ENTER
Buy the piece you are holding.
ESC
Close the menu. A piece you have not bought is discarded.
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 (Config.SellObjectCommision), paid in cash, after a confirmation.
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 Config.DefaultLightIntensity.
Doors
Swing open and shut with Config.DynamicDoors = true and the game_enableDynamicDoorCreation convar; otherwise they stand frozen.
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.
lua
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 once
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.
lua
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
}
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 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
WASD
Move the piece.
Q / E
Raise and lower it.
Z / X
Turn it.
Mouse wheel
Zoom.
ENTER
Take the picture.
BACKSPACE / ESC
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).
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.
lua
['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.
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.
lua
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.
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 / E and the mouse. A ghost of your character stands where the camera points, inside the shell by the door.
Face it the right way
Z / X turn the ghost: that is the way players face when they arrive.
Save it
ENTER saves it — the point must be inside the shell — and BACKSPACE cancels. It is written to shell_offsets.json and 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.
A shortcut to the points menu at the apartment door.
ShellSpawnCoords
vec4(279.46, 335.1, 98.57, 67.26)
Where interiors are built. Change it only together with shell_offsets.json, whose doors are stored as positions.
Intl
en-US, USD
How prices are written in the menus — locale, currency, decimals.
CameraOptions
look 500, move 10
Free camera speeds while decorating and placing doors.
ActionControls
—
The game control codes behind every key above, if you need to move one.
HideRadarInDecorate, ModernDecorateMode and FreeModeKeys in config/main.lua, and FurnitureShops and IllegalFurnitures in config/furniture.lua, are not read by Apartments. Changing them does nothing.