Kartik Scripts

Furniture Modeler

Decorate the inside of any property with a freecam + gizmo placement tool, a smooth, ps-housing-style editor built natively into the resource (no external dependencies). Place furniture, storage, cameras and more, then save the layout.


Opening the modeler

  1. Stand inside a property you may decorate (owner, or granted permission).
  2. Radial → Property → Decorate.

Inside the door, the prompt is [E] Leave and [H] Decorate, nothing else, by design.

Using it

  • Fly the freecam with WASD, Space/Ctrl for up/down, Shift/Alt for fast/slow. Hold right-mouse to look around.
  • Bottom bar: search, category tabs, a preview-distance slider, and a scrollable item-card grid with prices and a hover-preview eye.
  • Gizmo panel (top-left), Move/Rotate modes, live X/Y/Z + rotation readouts, move & rotate snap sliders, Drop to ground, opacity, and Place/Cancel. Right-click toggles translate/rotate.
  • Cart (right), new items with a running total and a per-storage allocation input; Buy & save commits them.
  • Placed panel, existing pieces you can edit or remove.
  • Click a prop in the room to select it; the gizmo attaches to it.
  • Duplicate copies the selected piece (or every selected piece) right next to it with the same rotation (pitch, roll and yaw), so repeated pieces like angled walls, fences or rows of chairs line up without re-rotating each copy. Undo / redo keeps the rotation too.

Placement rules

  • Furniture must stay inside the property's envelope (120 m radius around a shell/IPL interior point, or the drawn yard polygon for a walk-in). Both client and server enforce it.
  • Piece count is capped by Config.MaxFurniture (60) and per-model max.
  • Saving diffs the layout and charges only the new pieces.

Furniture catalogue

The catalogue is defined in shared/furniture.lua and shared/furniture/**. Each entry is a model with a label, category, price, and snap behaviour:

{ model = 'v_res_d_ramskull', label = 'Item', category = 'decor', price = 300, snap = 'floor' }

Some furniture carries a feature, turning the prop into a functional object:

  • feature = { type = 'stash' }: a storage prop drawing from the property's stash budget.
  • feature = { type = 'safe' }: a safe with optional PIN.

Model validation. Furniture models are validated against a DurtyFree ObjectList dump and guarded at runtime with IsModelInCdimage, invalid prop names are rejected rather than crashing.

Thumbnails

Furniture-shop thumbnails are generated with the admin command kpp_genimages (see Commands); images live under build/images/furniture/.

Furniture Store & Delivery Flow

When enabled via Config.FurnitureDelivery = true (in shared/properties.lua), instead of placing objects instantly inside the property or purchasing them directly into inventory, players buy furniture from a dedicated warehouse storefront with a real physical delivery mission.

Detailed Flow:

  1. Browse & Checkout: Players go to the furniture warehouse and open the storefront interface. They add items to their shopping cart and select a delivery destination (one of their owned or leased properties).
  2. Order Placement: Placing the order debits the funds and writes the items into the database (kp_furniture_orders) with a status of pending.
  3. The Delivery Mission:
    • The player starts the delivery job at the warehouse.
    • A delivery van is spawned with custom license plates (DELIVER) and keys are granted to the player.
    • GPS waypoints/blips are placed on the player's map routing them to the destination properties.
    • At each property, the player goes to the back of the van, unloads the furniture boxes, carries them physically to the door entrance, and marks them as delivered.
    • Once all deliveries are finished, the player returns the delivery van to the warehouse.
  4. Acquiring & Placing Props:
    • Once the delivery job is completed, the items are added to the player's inventory (e.g. as custom item models or a generic furniture box item).
    • The player can then enter their home, open the Furniture Modeler, and place the items from their inventory into the room.

Save, sell & reuse layouts

  • Save writes the layout to the property. Furniture offsets are stored shell-relative, so the same layout lines up on any property with the same shell.
  • You can sell or buy a saved layout on the Layout Marketplace, it only applies to a property with the same shell.

On this page