Skip to content

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):

FrameworkRemoveKeep
QBCoreqb-houses, and any other housing (ps-housing, qs-housing, bcs_housing …)your shell pack, qb-garages, qb-spawn
Qboxqbx_properties (or keep it for apartments only and create no houses in it)your shell pack, qbx_garages
ESX Legacyesx_property, plus esx_realestateagentjob if it only serves esx_property; any other housing (loaf_housing …)es_extended, esx_multicharacter
Standaloneany 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 ​

  1. Put lumo-housing in your resources folder.

  2. 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
    cfg
    ensure 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-housing
  3. The database tables are created on first start (sql/install.sql is the same schema if you prefer to import it).

  4. Give yourself admin, either with a framework group from Config.Admin.permissions or with the ACE:

    cfg
    add_ace group.admin lumohousing.admin allow
  5. Make 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 ​

  1. Run /housecreator and start a new property.
  2. Give it a name (its id, fixed once saved), an address, a price, optional rent, a description and up to 8 photo URLs.
  3. Pick the interior:
    • Shell: any shell from data/shells.lua that 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.
  4. 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.
  5. 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.
  6. 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 ​

  1. 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.

  2. server.cfg:

    cfg
    ensure 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-housing
  3. Storage needs ox_inventory: ESX's default inventory has no stashes.

  4. Wardrobe: Config.Wardrobe = 'auto' uses lumo-clothing or illenium-appearance. esx_skin alone has no saved outfits; with it, set Config.Wardrobe = 'custom' and fill Config.Hooks.openWardrobe.

  5. Money comes from the bank account, then money (cash).

  6. Admin: an ESX group listed in Config.Admin.permissions (admin), or the ACE lumohousing.admin.

  7. The bed's "Log out" needs esx_multicharacter (it uses its relog).

  8. Relogging inside: the home is kept in player meta (lumo_house; servers without xPlayer.setMeta use 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 fill Config.Hooks.openStash if yours is not listed.

Police raids ​

  • Config.Raid.jobs maps a job name to the lowest grade that may raid (police = 2). Officers must be on duty when requireDuty is 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 seconds on 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.enabled is 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 graceDays after it fell due, the bank takes the home back. Furniture is bought back as usual and upgrades are lost.

Interaction ​

Detected in this order:

  1. lumo-interact
  2. a real qb-target
  3. ox_target
  4. 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 ​

  • /decorate inside a home you own or rent. Set Config.Furniture.keyHolders = true to let key holders decorate too.
  • The catalogue is data/furniture.lua: model, label, price, category, and an optional kind (storage, wardrobe, bed) and wall = 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.mloRange of 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' } to data/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 add exit = vector4(...).
  • A base-game interior: stand at the inner side of its door, run /housecoords and add an entry to data/interiors.lua.
  • A realestate office: add { coords = vector4(...), label = 'Realestate', blip = true } to Config.Offices.