# Exports

## Client Exports

```lua
-- Exports the function "GetPlayerHouseId". This function returns the house ID of the player's current house.
-- If the player is inside a house, it gets the house ID of that house. Otherwise, it returns nil.
---@return number | nil
local function GetPlayerHouseId()
    return Client.Player?.inHouse?.houseId
end

-- Exports the function "GetPlayerHouse". This function returns the house the player is currently in.
-- If the player is inside a house, it gets the information of that house. Otherwise, it returns nil.
---@return InHouseType | nil
local function GetPlayerHouse()
    return Client.Player?.inHouse
end

-- Defines a local function "GetPlayerHouses". This function returns the houses owned by the player.
-- If the player owns any houses, it gets the list of those houses. Otherwise, it returns nil.
local function GetPlayerHouses()
    return Client.Player?.ownedHouses
end

-- Updates the specified indicator for a given house by adding or subtracting the provided value.
-- The `houseId` parameter specifies the ID of the house.
-- The `indicator` parameter specifies which indicator to update (e.g., "electricity", "power", "gas", or "water").
-- The `value` parameter specifies the amount to add to (positive value) or subtract from (negative value) the current indicator value.
-- The function returns the updated indicator value.
---@param houseId number
---@param indicator "electricity"|"power"|"gas"|"water"
---@param value number
---@return number
local function UpdateHouseIndicator(indicator, value)
    if Client.Player.inHouse then
        local response = Client.Functions.CallbackAwait(_e("Server:UpdateIndicator"),
            indicator, value, Client.Player.inHouse.houseId)
        if response.error then
            Client.Functions.SendNotify(locale("error", response.error), "error")
            return false
        end
        return true
    end
end

---Get available houses
---@return table
local function GetAvailableHouses()
    local defaultHouses = Client.Functions.GetDefaultHouses()
    local soldHouses = Client.Functions.GetSoldHouses()

    local soldHousesIds = {}
    for _, house in pairs(soldHouses) do
        if house ~= nil then
            table.insert(soldHousesIds, house.houseId)
        end
    end
    local availableHouses = {}
    for _, house in pairs(defaultHouses) do
        if house ~= nil and not lib.table.contains(soldHousesIds, house.houseId) then
            table.insert(availableHouses, house)
        end
    end
    return availableHouses
end

---@param houseId number
---@param houseType "square"|"rectangle"|"furnished"|nil
local function PurchaseHouse(houseId, houseType)
    if not houseId then return false end
    if not houseType then
        houseType = "furnished"
    end
    Client.Functions.Callback(_e("Server:PurchaseHouse"), function(response)
        if not response.error then
            Client.Functions.SendNotify(locale("house_purchased", houseId), "success")
            return true
        else
            Client.Functions.SendNotify(locale("error", response.error), "error")
            return false
        end
    end, houseId, houseType)
end

exports("GetPlayerHouseId", GetPlayerHouseId)
exports("GetPlayerHouse", GetPlayerHouse)
exports("GetPlayerHousePlacedFurnitures", function()
    if Client?.Player?.inHouse then
        return Client?.Player?.Furniture?.createdFurnitures
    end
    return {}
end)
exports("GetPlayerHouses", GetPlayerHouses)
exports("UpdateHouseIndicator", UpdateHouseIndicator)
exports("GetAvailableHouses", GetAvailableHouses)
exports("PurchaseHouse", PurchaseHouse)

```

## Server Exports

```lua
local function GetHouseById(houseId)
    return Server.SoldHouses[houseId]
end

-- Updates the specified indicator for a given house by adding or subtracting the provided value.
-- The `houseId` parameter specifies the ID of the house.
-- The `indicator` parameter specifies which indicator to update (e.g., "electricity", "power", "gas", or "water").
-- The `value` parameter specifies the amount to add to (positive value) or subtract from (negative value) the current indicator value.
-- The function returns the updated indicator value.
---@param houseId number
---@param indicator "electricity"|"power"|"gas"|"water"
---@param value number
---@return number
local function UpdateHouseIndicator(houseId, indicator, value)
    if not Utils.DefaultHouses[houseId] then
        return false
    end
    if not Config.Indicators[indicator] then
        return false
    end
    local House = Server.SoldHouses[houseId]
    if not House?.indicators[indicator] or (House.indicators[indicator] + value < 0) then
        return false
    end
    return Server.Functions.UpdateHouseIndicator(indicator, value, houseId)
end

---@param houseId number
---@param indicator "electricity"|"power"|"gas"|"water"
---@return number
local function GetHouseIndicatorValue(houseId, indicator)
    local House = Server.SoldHouses[houseId]
    if House then
        local indicator = House.indicators?[indicator]
        if indicator then
            return indicator
        end
    end
    return 0
end

local function GetAvailableHouses()
    local defaultHouses = Utils.DefaultHouses
    local soldHouses = Server.SoldHouses

    local soldHousesIds = {}
    for _, house in pairs(soldHouses) do
        if house ~= nil then
            table.insert(soldHousesIds, house.houseId)
        end
    end
    local availableHouses = {}
    for _, house in pairs(defaultHouses) do
        if house ~= nil and not lib.table.contains(soldHousesIds, house.houseId) then
            table.insert(availableHouses, house)
        end
    end
    return availableHouses
end

exports("GetHouseById", GetHouseById)
exports("UpdateHouseIndicator", UpdateHouseIndicator)
exports("GetAvailableHouses", GetAvailableHouses)

```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.0resmon.org/0resmon/0r-resources/0r-pixelhouse/exports.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
