RedM documentation

Murphy's Housing

Reference

Developer API

Use version-scoped Housing exports and validate permissions in trusted integrations.


Scope and execution side

This API reference describes murphy_realestate 1.35.1. Check the implementation and bundled API document in your installed version before integrating it. Later release notes, including 1.36.0 and 1.38.1, establish only the changes they explicitly describe.

Keep these identifiers distinct:

Value Meaning
source The connected server player ID.
charid The framework's persistent character identifier.
propId The property record ID.
isInstance true for an instance, false for an MLO.

Read access from a server resource

Server export Purpose
GetProperty(propId, isInstance) Read a property view, or nil if absent.
GetAllProperties(kind) Read instance, mlo, or all properties.
GetPropertyOwner(propId, isInstance) Read the owner identifier.
IsPropertyOwner(source, propId, isInstance) Check ownership for the connected player.
HasGuestPermission(source, propId, isInstance, action) Check a specific access action.
IsPlayerInsideInstance(source) Get the instance ID occupied by the player, or nil.
GetPlayerProperties(charid, username) Find ownership/guest records for that character lookup.
IsPlayerAdmin(source) Check the configured administrative group.

Read the returned fields for the installed version. Server-side property information can contain owner and tax data. Do not forward the whole result to every client; return only fields required by the feature and authorized for the requester.

Administrative actions

The inspected source exposes TransferOwnership(propId, isInstance, newOwnerCharid, demoteOldToGuest), AdminAssignOwner(propId, isInstance, owner, ownerType, gradeMin), AdminReleaseProperty(propId, isInstance) and AdminExtendTax(propId, isInstance, weeks).

These are trusted server integrations. They do not take a requesting player's source as their first argument. Your calling code must establish authority, validate the target and arguments, and handle a failed result. Do not expose them as unrestricted client-triggered events. Ownership changes and releasing a property affect real player rights and data.

Client context

GetCurrentInstance() returns the local player's instance ID or nil. GetPlacementContext(maxMloRadius) resolves a placement context for the current instance or nearby accessible MLO. Use the client context for presentation; validate any resulting action again on the server.

Ownership notifications

The server event murphy_realestate:server:propertyOwnershipChanged carries the changed property's ID, kind, old/new owner and reason. In the inspected source, reasons include purchase, sale, leaving, transfer, eviction, administrative assignment/release and a property update.

Use a server AddEventHandler in your integration. A property update does not necessarily change ownership, so do not award payments merely because the event fired. Re-read the state required by your integration and make repeat handling safe.

Functional furniture and lockpicking

Config.FunctionalProps maps a furniture model to its label, visibility permission and a clientExport and/or serverEvent. The hook runs your resource's effect. Client visibility is not authorization: validate the caller, property, permission and interaction position before granting an item or invoking a paid action.

The lockpick bridge names a client resource and startExport under Config.Integrations.lockpick. The inspected bridge expects a boolean success result and uses StartLockPick by default. Confirm exact capitalization in the minigame's implementation; a similarly spelled README example can be wrong.

Match key metadata and returned fields to your installed framework adapter. See Access and Storage for permission boundaries and Overview for the version scope.


Last updated: September 10, 2026