Installing Lumo Housing
Remove what it replaces
Run only one housing script. Stop and remove the other before you start Lumo Housing (delete the folder, or its ensure line):
| Framework | Remove | Keep |
|---|---|---|
| QBCore | qb-houses, and any other housing (ps-housing, qs-housing, bcs_housing …) | your shell pack, qb-garages, qb-spawn |
| Qbox | qbx_properties (or keep it for apartments only and create no houses in it) | your shell pack, qbx_garages |
| ESX Legacy | esx_property, plus esx_realestateagentjob if it only serves esx_property; any other housing (loaf_housing …) | es_extended, esx_multicharacter |
| Standalone | any other housing script |
Lumo Housing ships no houses: an admin creates them in game with /housecreator (about a minute per house, see Creating a house). Old houses and ownership from another script are not imported.
Starter apartments are a separate product, lumo-apartments. Both work together: apartments are furnished through Lumo Housing's catalogue.
Every server
Put
lumo-housingin your resources folder.In
server.cfg, start it after these, so it finds them:- oxmysql
- your framework
- your inventory
- your target or interact resource
- shell packs and MLO maps
- your garage resource
cfgensure oxmysql ensure qb-core # or qbx_core / es_extended / nothing ensure ox_inventory # your inventory ensure my-shell-pack # optional shells / MLO maps ensure qb-garages # optional ensure lumo-housingThe database tables are created on first start (
sql/install.sqlis the same schema if you prefer to import it).Give yourself admin, either with a framework group from
Config.Admin.permissionsor with the ACE:cfgadd_ace group.admin lumohousing.admin allowMake houses in game with
/housecreator(see below).
Coming from qb-houses or another housing script:
- Stop it and remove it. Run only one housing resource.
- Houses and ownership are not imported. Create the houses again with the creator; it takes about a minute per house.
- Spawn menus and phones that read the qb-houses tables keep working (
Config.Compat.qbHousesTables). Those tables are rewritten from Lumo Housing's own data on every start, so do not edit them by hand.
Creating a house
- Run
/housecreatorand start a new property. - Give it a name (its id, fixed once saved), an address, a price, optional rent, a description and up to 8 photo URLs.
- Pick the interior:
- Shell: any shell from
data/shells.luathat your server streams. - Interior: a base-game interior from
data/interiors.lua. - MLO door: aim at the real door of a map you run. The player walks in. There is no teleport and no units.
- Shell: any shell from
- Stand on the spot and pick the front door (outside), and optionally a garage. For a shell you can also pick the inside door: save, use "Look inside", then pick it.
- Units (shells and interiors): 0 is a single house. 1–99 makes a building whose entrance opens a lobby with a grid of units, each its own home.
- Save. The house shows in the browser and, unless it is hidden or its blip is off, on the map.
QBCore
- Remove
qb-houses(see the table at the top). qb-spawn, qb-phone and other scripts that read the qb-houses tables keep working, because Lumo Housing fills them. - Spawn menus read
metadata.inside.house(the home id) and the mirrored qb-houses tables. "Last location" puts the player back inside their home. - The bed logs out with QBCore's logout and reopens qb-multicharacter.
- Storage: lumo-inventory, qb-inventory (2.x opens from the server; 1.x uses the client events), ps-inventory and lj-inventory are detected.
- Garage: qb-garages gets each house garage through its house-garage events.
Qbox
- Storage uses ox_inventory. The bed logs out with
qbx_core's logout, which opens Qbox's character menu. - If you also run qbx_properties, use only one of the two for houses: remove it, or keep it for its starter apartments only and create no houses in it.
ESX Legacy
Remove
esx_property(see the table at the top). Both answer the same doors, so running the two together gives double prompts and two owners per house.server.cfg:cfgensure oxmysql ensure ox_lib ensure es_extended ensure ox_inventory ensure ox_target # optional; without one, doors use [E] prompts ensure lumo-clothing # optional wardrobe ensure lumo-housingStorage needs ox_inventory: ESX's default inventory has no stashes.
Wardrobe:
Config.Wardrobe = 'auto'uses lumo-clothing or illenium-appearance. esx_skin alone has no saved outfits; with it, setConfig.Wardrobe = 'custom'and fillConfig.Hooks.openWardrobe.Money comes from the
bankaccount, thenmoney(cash).Admin: an ESX group listed in
Config.Admin.permissions(admin), or the ACElumohousing.admin.The bed's "Log out" needs esx_multicharacter (it uses its relog).
Relogging inside: the home is kept in player meta (
lumo_house; servers withoutxPlayer.setMetause a KVP). On login the player is put back inside their home. If the home is no longer theirs, they are walked out of its front door instead of being left in an empty interior.
Standalone (no framework)
- Players are identified by their Rockstar licence.
- Every price is free, and there is no logout.
- Storage needs an inventory with stashes. Set
Config.Inventory = 'custom'and fillConfig.Hooks.openStashif yours is not listed.
Police raids
Config.Raid.jobsmaps a job name to the lowest grade that may raid (police = 2). Officers must be on duty whenrequireDutyis on.- ESX has no duty flag on the job, so every officer with the job counts as on duty. If you use
off<job>job names for off duty, they are not in the list anyway. Config.Raid.item = 'police_ram'makes the item a requirement. It is not used up.- The breach takes
secondson the server's clock. The officer can stop it with X. Shells and interiors let the officer in, while an MLO home just has its door unlocked. - Standalone servers have no jobs, so raids are off there.
Mortgages
- Offered on every purchase while
Config.Mortgage.enabledis on. Turn it off to sell for the full price only. - Instalments are taken from online owners when due, and also when the owner next logs in. If one is still unpaid
graceDaysafter it fell due, the bank takes the home back. Furniture is bought back as usual and upgrades are lost.
Interaction
Detected in this order:
- lumo-interact
- a real qb-target
- ox_target
- a built-in prompt with keys at doors
Force one with Config.Target. ox_target provides qb-target, which is detected correctly. Objects (furniture such as storage, wardrobes and beds, pets, the realtor) follow the same order; force them separately with Config.TargetObjects, for example 'qb' to keep an eye-target menu on objects while doors use lumo-interact.
Furniture
/decorateinside a home you own or rent. SetConfig.Furniture.keyHolders = trueto let key holders decorate too.- The catalogue is
data/furniture.lua: model, label, price, category, and an optionalkind(storage,wardrobe,bed) andwall = true. Every model must exist in the base game or in a pack you stream. - Placement: move with the mouse, rotate with the scroll wheel, raise and lower, and pieces snap to walls. The keys are shown on screen while placing.
- MLO homes: furniture shows to everyone within
Config.Furniture.mloRangeof the door. - With lumo-apartments, flats are furnished through the same catalogue; nothing to set up.
Adding your own
- A shell: add
{ model = 'name', label = 'Label' }todata/shells.lua. To set where players arrive, enter a house that uses it, stand at the door facing in, run/housecoords(Config.Debug = true) and addexit = vector4(...). - A base-game interior: stand at the inner side of its door, run
/housecoordsand add an entry todata/interiors.lua. - A realestate office: add
{ coords = vector4(...), label = 'Realestate', blip = true }toConfig.Offices.