Skip to main content
sh-housing is a database-backed property system for RedM roleplay servers. It lets players purchase, rent, or finance residential properties and hotel rooms, furnish their interiors with up to 400 placed items, and control door access through a direct integration with sh-doorlocks. A built-in realtor job gives designated players the tools to list, sell, and manage properties on behalf of the server economy, while configurable taxes, finance terms, and rent cycles let you tune the system to fit your server’s balance.

Overview

DetailValue
FrameworksVORP, RSG, auto
LocalizationEnglish, Spanish, German
Door Integrationsh-doorlocks (recommended) or internal
Admin Command/houseadmin

Features

Create residential properties, hotel rooms, and interior shell presets. Each property type has its own configuration block, so you can set different tax rates, maximum ownership limits, and access rules per type.
Three contract models give your players options that suit their character’s economic situation:
  • Buy — full ownership transfer with a one-time purchase and configurable buy tax
  • Rent — recurring payment on a configurable cycle (default: 7-day cycle) with grace periods and auto-eviction on missed payments
  • Finance — mortgage-style contract with a configurable down-payment percentage, installment schedule, and repossession on default
Assign the realtor job to designated players. Grade-gated permissions control who can create listings, publish them to the market, execute sales, and delete properties. An optional management ledger tracks all transactions for server administration.
Players place up to 400 furniture items per property through an in-game placement tool. Snap mode and grid step controls make positioning precise. Wallet-purchased items can be sold back for a configurable percentage of the original price (default: 50%).
Place pets as positioned ped objects inside or around a property. Each pet has a configurable leash radius and roam behavior, adding life to player homes without requiring a separate animal script.
Every property has a built-in stash with configurable slot count and weight limit. Only the owner and players with shared or guest access can open the stash.
Three access levels cover the range of sharing scenarios:
  • Ownership — full control including furniture, stash, and door lock management
  • Shared access — persistent co-owner level access for family members or roommates
  • Guest access — time-limited access that expires automatically after a configurable duration
Set taxes on purchases and rent, define prepay cycles for rent and finance contracts, and configure late fees and grace periods. All economy values are in your framework’s default currency and are editable without a server restart through the admin command.
Log property purchases, rent payments, evictions, repossessions, and realtor actions to a Discord channel. Each event type posts a formatted embed with the relevant character name, property ID, and timestamp.

Installation

1

Add the resource

Place the sh-housing folder inside your server’s resources directory.
2

Import the database schema

Run the provided SQL file against your server database to create the required tables. The file is located at sh-housing/sql/install.sql.
3

Set your framework

Open config.lua and set Config.Framework. Use 'auto' to let the resource detect VORP or RSG at runtime, or set it explicitly if you want to lock the value.
4

Configure sh-doorlocks (recommended)

If you are running sh-doorlocks, set Config.Doors.Provider to 'sh-doorlocks'. The housing system will create and manage door lock entries automatically when properties are bought or rented. If you are not running sh-doorlocks, set the provider to 'internal'.
5

Set up realtor grades

Define which grades of the realtor job can perform each action in Config.Realtor.GradePermissions. Adjust to match however many grades your realtor job has.
6

Configure your webhook

Add your Discord webhook URL to Config.Logging.webhook. Set Config.Logging.enabled to true to enable logging.
7

Add ACE permission for admin command

Grant the /houseadmin command to your admin group by adding the relevant ACE permission (shhousing.admin) to your server.cfg.
8

Start the resource

Add ensure sh-housing to your server.cfg after ensure sh-doorlocks (if applicable) and restart your server.

Configuration

config.lua
Config.Framework = 'auto'  -- 'auto', 'vorp', 'rsg'

Config.Economy = {
    DefaultCurrency       = 'cash',
    FurnitureRefundPercent = 60,   -- 60% sell-back value for wallet furniture

    Taxes = {
        Enabled              = true,
        PropertyBuyPercent   = 0,   -- tax on buy/finance contracts
        PropertyRentPercent  = 2,   -- tax applied per rent cycle
        HotelPercent         = 0,
    },

    Rent = {
        CycleDays           = 7,    -- billing cycle in days
        GraceDays           = 2,
        LateFeeCash         = 25,
        AutoEvict           = true,
    },

    Finance = {
        Enabled             = true,
        DownPaymentPercent  = 20,
        DefaultPayments     = 12,
        CycleDays           = 7,
        AutoRepossess       = true,
    },
}

Config.PropertyOwnership = {
    MaxOwnedPerCharacter = 1,  -- <= 0 disables the limit
}

Config.Realtor = {
    JobName = 'realtor',
    GradePermissions = {
        create    = 3,
        publish   = 3,
        sell      = 2,
        unpublish = 3,
        delete    = 4,
    },
}

Config.Furniture = {
    MaxPlacementsPerProperty = 400,
    GridStep                 = 0.05,
    RenderDistance           = 130.0,
}

Config.Doors = {
    Provider        = 'auto',  -- 'auto', 'sh-doorlocks', 'internal'
    DefaultLockState = true,
}

Config.Logging = {
    enabled  = false,
    webhook  = '',   -- Discord webhook URL
    username = 'Housing Ledger',
}
Setting Config.Doors.Provider to 'auto' makes sh-housing check whether sh-doorlocks is running at startup and fall back to 'internal' if it is not found. Set the value explicitly if you want to guarantee a specific provider.

Server Exports

Use these exports to interact with sh-housing from other resources.
-- Create a new property record programmatically
-- Returns the new property record or nil, error
exports['sh-housing']:CreateProperty(payload)

-- Grant access to a property for a character
-- accessType: 'shared' or 'guest'
-- subjectType: 'charId' or 'source'
-- expiresAt: Unix timestamp or nil for permanent
exports['sh-housing']:GrantAccess(propertyId, accessType, subjectType, subjectValue, expiresAt, metadata)

-- Create a buy, rent, or finance contract for a player
-- contractType: 'buy', 'rent', or 'finance'
exports['sh-housing']:CreateContract(propertyId, contractType, holderSource, terms)

-- Open the property stash for a player
exports['sh-housing']:OpenHouseStash(source, propertyId)

Admin Command

The /houseadmin command opens the server-side property management panel. From here you can view all properties, force-transfer ownership, cancel contracts, refund furniture, and manually trigger evictions or repossessions. Access to /houseadmin is controlled by ACE permission (shhousing.admin), job grade, or server group — configure whichever method matches your server’s admin setup in Config.AdminAccess.
Use /houseadmin to test your property setup before opening your server to players. You can create test contracts, place furniture, and verify door integration without spending any in-game currency.
Finance contracts with missed payments trigger auto-repossession after the grace period expires. Make sure your grace period and late fee values in Config.Economy are clearly communicated to players in your server rules to avoid disputes.