# Client Exports

### GetProperty

Returns full data of the specified property.

```lua
---@return {propertyId: string | nil}
---@return {propertyData: table}
local propertyData = exports['vms_housing']:GetProperty(propertyId)
```

***

### GetPlayerProperties

Returns a list of all properties owned by the current player.

```lua
---@return {properties: table}: Data list of all properties
local properties = exports['vms_housing']:GetPlayerProperties()
```

<details>

<summary><strong>Example</strong></summary>

```lua
local properties = exports['vms_housing']:GetPlayerProperties()

print(json.encode(properties, {indent=true}))
--[[
    {
        "id": 138,
        "name": "Paleto House",
        "description": "",
        "type": "shell",
        "owner_name": "Tony Blunt"
        "owner": "char3:11000014c8ce27b",
        "region": "Paleto Bay",
        "address": "Procopio Dr",
        "last_enter": 1751993299,
        "unpaidBills": 0,
        "bills": [
            {
                "details": "{\"electricityUsage\":0,\"rateInfo\":{\"electricity\":0.0115,\"internet\":80.0,\"water\":0.5},\"internet\":80,\"electricity\":0,\"waterUsage\":0,\"water\":0.0}",
                "type": "services",
                "paid": false,
                "period": "07:2025",
                "id": 334,
                "house_id": 138,
                "total": 80
            }
        ],
        "permissions": [],
        "keys": "[\"138-9008CEA257\",\"138-9361DPW426\"]",
        "sale": {
            "active": false,
            "defaultActive": true,
            "defaultPrice": 1500000,
            "price": 1500000
        },
        "rental": {
            "active": false,
            "defaultActive": false,
            "defaultPrice": 0,
            "price": 0
        },
        "metadata": {
            "exit": {
                "w": 47.32084655761719,
                "x": -213.5472,
                "y": 6396.1655,
                "z": 32.1852
            },
            "lightState": false,
            "enter": {
                "x": -213.4049,
                "y": 6395.9585,
                "z": 33.7235
            },
            "allowFurnitureInside": true,
            "deliveryType": "outside",
            "lastCadastralPeriod": "07:2025",
            "zone": {
                "maxZ": 41.33707237243652,
                "area": 1148,
                "minZ": 25.33707237243652,
                "points": [
                    {
                        "y": 6362.8569,
                        "x": -192.8159
                    },
                    {
                        "y": 6378.2285,
                        "x": -177.2231
                    },
                    {
                        "y": 6388.0571,
                        "x": -186.8981
                    },
                    {
                        "y": 6389.7969,
                        "x": -185.0591
                    },
                    {
                        "y": 6408.2832,
                        "x": -204.0579
                    },
                    {
                        "y": 6415.0508,
                        "x": -207.3751
                    },
                    {
                        "y": 6415.5547,
                        "x": -207.3833
                    },
                    {
                        "y": 6398.7544,
                        "x": -227.5731
                    }
                ]
            },
            "upgrades": {
                "furnitureLimit": "1"
            },
            "locked": false,
            "allowFurnitureOutside": true,
            "garage": {
                "w": 46.99999618530273,
                "x": -197.7123,
                "y": 6397.5713,
                "z": 30.8626
            },
            "delivery": {
                "w": 130.0,
                "x": -216.7046,
                "y": 6394.7998,
                "z": 32.0852
            },
            "shell": "envi_shell_02_empty"
        },
        "creator": "char3:11000014c8ce27b",
        "furniture": [
            {
                "position": {
                    "pitch": 0.0,
                    "y": -3.47876214981079,
                    "z": 502.9772644042969,
                    "yaw": 0.0,
                    "x": -2.18221616744995,
                    "roll": -0.0,
                    "environment": "inside"
                },
                "stored": 0,
                "model": "prop_wall_light_06a",
                "id": 640,
                "metadata": [],
                "house_id": 138
            },
        ],
    },
]]
```

</details>

***

### IsPlayerOnPropertyZone

Returns `true` if the player is standing in the property's yard/zone (outside).

```lua
---@return {inAnyZone: boolean}
---@return {propertyId: string}
local inAnyZone, propertyId = exports['vms_housing']:IsPlayerOnPropertyZone()
```

***

### IsPlayerInsideProperty

Returns `true` if the player is currently inside any property interior or inside MLO.

```lua
---@return {propertyId: string | nil}
---@return {propertyData : table | nil}
local propertyId, propertyData = exports['vms_housing']:IsPlayerInsideProperty()
```

***

### GetCurrentRegion

Returns the current region by coords.

```lua
---@param {coords: vector3}
---@return {region: string | nil}
local region = exports['vms_housing']:GetCurrentRegion(coords)
```

***

### HasKeys

Returns `true` if the player has keys to the specified property.

```lua
---@param {propertyId: number | string}
---@return {hasKeys: boolean}
local hasKeys = exports['vms_housing']:HasKeys(propertyId)
```

***

### HasPermissions

Returns `true` if the player has the given permission for a property.

```lua
---@param {propertyId: number | string}
---@param {permission: string}
---@return {hasPermission: boolean}
local hasPermission = exports['vms_housing']:HasPermissions(propertyId, permission)
```

<details>

<summary>Explanation</summary>

List of available permissions:

* garage
* furniture
* billPayments
* keysManage
* upgradesManage
* marketplaceManage
* sell
* automaticSell
* rent
* rentersManage

</details>

***

### HasAnyPermission

Returns `true` if the player has **any** permissions set for the property.

```lua
---@param {propertyId: number | string}
---@return {hasAnyPermission: boolean}
local hasAnyPermission = exports['vms_housing']:HasAnyPermission(propertyId)
```

***

### IsHaveAnyApartment

Returns `true` if the player owns any apartment in the specific building.

```lua
---@param {buildingId: number | string}
---@return {isHave: boolean}
local isHave = exports['vms_housing']:IsHaveAnyApartment(buildingId)
```

***

### TeleportToStartingApartment

Teleport the player directly to the property.

{% hint style="info" %}
It works only once, after the Starting Apartment has previously been granted.\
[**Example Integration**](https://docs.vames-store.com/assets/vms_housing/guides/how-to-use-starter-apartments)
{% endhint %}

```lua
exports['vms_housing']:TeleportToStartingApartment()
```

***

### CreateDirtUnderPlayer

Creating dirt for the house under player.

You can use this in your eating / drinking system when a player eats, they may leave a stain or crumbs.

```lua
---@param {model: string}: Dirt object model from VMS Housing files
exports['vms_housing']:CreateDirtAtCoords(model)
```

<details>

<summary>Dirt Models</summary>

<kbd>vms\_blood1</kbd>\ <kbd>vms\_blood1small</kbd>\ <kbd>vms\_blood2</kbd>\ <kbd>vms\_blood2small</kbd>\ <kbd>vms\_dirtfootsteps</kbd>\ <kbd>vms\_coffeestain1</kbd>\ <kbd>vms\_coffeestain2</kbd>\ <kbd>vms\_crumbs1</kbd>\ <kbd>vms\_crumbs2</kbd>\ <kbd>vms\_dirtmud1</kbd>\ <kbd>vms\_dirtmud2</kbd>\ <kbd>vms\_dirtmud3</kbd>\ <kbd>vms\_dirtmud4</kbd>\ <kbd>vms\_ketchupspill</kbd>\ <kbd>vms\_liquidspill1</kbd>\ <kbd>vms\_liquidspill2</kbd>\ <kbd>vms\_liquidspill3</kbd>\ <kbd>vms\_liquidspill4</kbd>\ <kbd>vms\_mustardspill</kbd>\ <kbd>vms\_oilspill1</kbd>\ <kbd>vms\_oilspill2</kbd>\ <kbd>vms\_sodaspill1</kbd>\ <kbd>vms\_winestain1</kbd>

</details>

***

### OpenMarketplace

Opens the Marketplace UI to buy or rent properties.

```lua
exports['vms_housing']:OpenMarketplace()
```

***

### OpenManageMenu

Opens the management menu for a property (if has any permissions).

```lua
exports['vms_housing']:OpenManageMenu()
```

***

### OpenFurnitureMenu

Opens the Furniture Menu for a given property (if allowed).

```lua
exports['vms_housing']:OpenFurnitureMenu()
```

***

### OpenRealEstate

Opens the Real Estate Agent Menu.

```lua
exports['vms_housing']:OpenRealEstate()
```
