# Configuration

***

### 1. Configure `cl_config.lua`

In this section, you will configure the client-side configuration file `cl_config.lua`. Follow the instructions below to set it up according to your framework (ESX or QBcore).

{% tabs %}
{% tab title="cl_config.lua" %}
```lua
RESMON = {}

RESMON.Houses = {}
RESMON.Blips = {}

RESMON.Options = {
    Language = 'en',                          -- Default language for the system (supports language codes like 'de', 'fr', etc.)
    UseVersionCheck = true,                   -- Enable version checking for resource compatibility
    UseOldEsx = false,                        -- Use legacy ESX exports (set to `true` for older frameworks)
    UseWeight = true,                         -- Enable weight-based inventory (useful for housing-related items)
    DataStoreClothes = true,                  -- Enable saving of player clothing data
    DataStore = "esx_datastore:getDataStore", -- Callback for accessing the datastore
    DatastoreName = "rs_housing",             -- Identifier for the housing datastore
    OwnMaxHouses = 5,                         -- Maximum number of houses a player can own
    EnableHouseKeys = true,                   -- Enable the functionality for house keys
    MaxKeys = 5,                              -- Maximum number of keys a player can give to others
    AdminGroups = {"admin", "mod", "dev"},    -- List of groups with administrative privileges
    AdminIDs = {"xxxxxxxxxxxxxxxxxxxxxx"},    -- Specific identifiers with admin privileges (e.g., Discord or Steam IDs)
    Commands = {
        createHouse = "createHouse",          -- Command for creating new houses
    },

    Prices = {
        buyMultiplier = 1.0,                  -- Multiplier for the buying price of houses
        sellPrice = 0.5,                      -- Multiplier for the selling price of houses
    },

    SharedObject = {
        client = "esx:getSharedObject",       -- Retrieve client-side ESX object
        server = "esx:getSharedObject",       -- Retrieve server-side ESX object
    },

    CallBacks = {
        ['esx:playerLoaded'] = 'esx:playerLoaded',          -- Callback triggered when a player loads into the game
        ['skinchanger:getSkin'] = 'skinchanger:getSkin',    -- Callback for retrieving player skin
        ['skinchanger:loadClothes'] = 'skinchanger:loadClothes', -- Callback for applying clothes to the player
        ['skinchanger:loadSkin'] = 'skinchanger:loadSkin',  -- Callback for loading a player’s skin
        ['esx_skin:setLastSkin'] = 'esx_skin:setLastSkin',  -- Callback for setting the last saved skin
        ['esx_skin:save'] = 'esx_skin:save'                -- Callback for saving a player’s skin
    },
}

RESMON.Marker = {
    enabled = true, -- Enable or disable the marker
    type = 21, -- Marker type (21 represents a specific marker style)
    color = { r = 105, g = 0, b = 0, a = 100 }, -- RGBA color values for the marker
    scale = { x = 0.5, y = 0.5, z = 0.5 }, -- Scale of the marker
    drawDistance = 100.0, -- Distance at which the marker is visible
    bobUpAndDown = false, -- Whether the marker should bob up and down
    faceCamera = false, -- Whether the marker should face the camera
    rotate = true -- Whether the marker should rotate
}

RESMON.BuyBlip = {
    enabled = true, -- Enable or disable the blip
    sprite = 374, -- Sprite ID for the blip
    scale = 0.5, -- Scale of the blip
    shortRange = true, -- Whether the blip is visible only in short range
    color = 2, -- Color ID for the blip
    text = 'Buy House' -- Text to display for the blip
}

RESMON.OwnBlip = {
    enabled = true, -- Enable or disable the blip
    sprite = 40, -- Sprite ID for the blip
    scale = 0.7, -- Scale of the blip
    shortRange = true, -- Whether the blip is visible only in short range
    color = 63, -- Color ID for the blip
    text = 'My Home' -- Text to display for the blip
}

RESMON.HouseTypes = {
    [1] = { -- First house type
        joinleave = { x = -174.17, y = 497.50, z = 137.66, h = 183.79, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } },
        housemenu = { x = -165.42, y = 495.95, z = 137.65, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } },
        armorymenu = { x = -175.98, y = 491.94, z = 130.04, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } },
        clothesmenu = { x = -167.41, y = 487.86, z = 133.84, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } }
    },
    [2] = { -- Second house type
        joinleave = { x = 266.11, y = -1007.3, z = -101.01, h = 10.29, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } },
        housemenu = { x = 256.96, y = -996.87, z = -99.01, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } },
        armorymenu = { x = 265.02, y = -995.8, z = -99.01, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } },
        clothesmenu = { x = 259.77, y = -1003.81, z = -99.01, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } }
    },
    [3] = { -- Third house type
        joinleave = { x = 346.52, y = -1012.73, z = -99.2, h = 359.24, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } },
        housemenu = { x = 349.66, y = -1007.4, z = -99.2, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } },
        armorymenu = { x = 345.09, y = -995.5, z = -99.2, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } },
        clothesmenu = { x = 351.73, y = -998.81, z = -99.2, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } }
    },
    [4] = { -- Fourth house type
        joinleave = { x = 1274.01, y = -1719.64, z = 54.77, h = 11.13, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } },
        housemenu = { x = 1272.35, y = -1712.03, z = 54.77, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } },
        armorymenu = { x = 1275.59, y = -1710.57, z = 54.77, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } },
        clothesmenu = { x = 1273.63, y = -1707.81, z = 54.77, marker_enabled = true, marker_type = 21, marker_color = { r = 105, g = 0, b = 0, a = 100 } }
    }
}

HelpNotify = function(msg, E)
    ESX.ShowHelpNotification(msg, E)
    -- exports["rs_hud"]:HelpNotify(msg, E)
end

Notify = function(msg, type, time)
    TriggerEvent('esx:showNotification', msg)
    -- TriggerEvent('rs_notify', 'Housing', msg, 'info', 5000)
end
```
{% endtab %}
{% endtabs %}

***

### 2. Configure `sv_config.lua`

In this section, you will configure the server-side configuration file `sv_config.lua`. Follow the instructions below to set it up according to your framework (ESX or QBcore)

{% tabs %}
{% tab title="sv_config.lua" %}
```lua
CFG = {}

CFG.Webhooks = {
    Color = "16777215",
    Author = "ResmonStudio",
    AuthorURL = "https://i.ibb.co/PZDN7K4/logo.png",
    ThumbURL = "https://i.ibb.co/PZDN7K4/logo.png",
    Username = "RS | Logs",
    Webhooks = {
        buy = {'PUT_YOUR_WEBHOOK'},
        sell = {'PUT_YOUR_WEBHOOK'},
        storage = {'PUT_YOUR_WEBHOOK'},
        weapons = {'PUT_YOUR_WEBHOOK'},
        blackmoney = {'PUT_YOUR_WEBHOOK'},
    }
}
```
{% endtab %}
{% endtabs %}

***

### 3. Select Languages in `sh_languages.lua`

In the `sh_languages.lua` file, you can manage all available language options. To set your preferred language and its corresponding translations, navigate to `cl_config.lua` and specify your desired locale. This allows you to customize the different languages.

{% tabs %}
{% tab title="sh_languages.lua" %}
```lua
RESMON.Languages = {
    ['en'] = {
        ['price'] = 'Price: ',
        ['owner'] = 'Owner: ',
        ['open'] = 'Open',
        ['closed'] = 'Closed',
        ['houseMenus'] = 'House Menu',
        ['clothMenu'] = 'Closet',
        ['clothRemoveMenu'] = 'Clothing - Remove',
        ['armoryMenu'] = 'Armory',
        ['armoryAddWeapon'] = 'Armory - Store Weapon',
        ['armoryAddItem'] = 'Armory - Store Item',
        ['armoryRemoveWeapon'] = 'Armory - Remove Weapon',
        ['armoryRemoveItem'] = 'Armory - Remove Item',
        ['playerDressing'] = 'Clothing',
        ['removeClothM'] = 'Remove Clothing',
        ['putWeapon'] = '[Weapon] Store',
        ['getWeapon'] = '[Weapon] Retrieve',
        ['putStock'] = '[Item] Store',
        ['getStock'] = '[Item] Retrieve',
        ['blackMoneyLabel'] = 'Black Money: ',
        ['takeBlackMoneys'] = 'Take Black Money',
        ['putBlackMoneys'] = 'Store Black Money',
        ['openCloseHouse'] = 'Open/Close House',
        ['refreshName'] = 'Update Name',
        ['giveKeys'] = 'Give House Key',
        ['seeKeys'] = 'View All House Keys',
        ['house'] = 'House Menu',
        ['armory'] = 'Armory Menu',
        ['housePosTitle'] = 'House Position',
        ['housePosLabel'] = 'Set House Position',
        ['houseTypeTitle'] = 'Enter House Type',
        ['housePriceTitle'] = 'Enter House Price',
        ['noowner'] = 'None',
        ['amount'] = 'Invalid amount!',
        ['noTargets'] = 'No players nearby.',
        ['houseJoin'] = 'Press [E] to enter the house',
        ['houseLeave'] = 'Press [E] to leave the house',
        ['houseArmory'] = 'Press [E] to open the Armory',
        ['houseMenu'] = 'Press [E] to manage the house',
        ['houseClothes'] = 'Press [E] to change clothes',
        ['removeCloth'] = 'The clothing item has been removed from your closet',
        ['houseText'] = 'This property includes a private gun safe and, for luxury homes, a closet as well!',
        ['nameupdate'] = 'Name has been updated!',
        ['houseClosed'] = 'This house is closed!',
        ['houseOpen'] = 'House unlocked!',
        ['houseClose'] = 'House locked!',
        ['notHouse'] = 'You are not in a house!',
        ['notMyHouse'] = 'This house doesnt belong to you!',
        ['ownAlready'] = 'This house already belongs to someone!',
        ['nowOwn'] = 'Congratulations! You are now a homeowner!',
        ['notEnough'] = 'You dont have enough money with you!',
        ['houseSell'] = 'You sold your house to the state!',
        ['notSell'] = 'You cant sell the house because it doesnt belong to you!',
        ['onlyHouse'] = 'You cant buy more houses! (You already own {0}!)',
        ['houseId'] = 'House ID: {0}',
        ['haveKey'] = '{0} already has the key to your house!',
        ['giveKey'] = 'You have given {0} the key to your house!',
        ['removeKey'] = 'You have taken the key away from {0}!',
        ['cantGiveKey'] = 'You cant give out any more keys!',
        ['noTarget'] = 'No player was found nearby.',
        ['getItem'] = 'Retrieved: {0}x {1}',
        ['putItem'] = 'Stored: {0}x {1}',
        ['notEnoughItem'] = 'Not enough in with you!',
        ['restart'] = 'You cant store or retrieve anything 1 minute before the restart!',
        ['putBlackMoney'] = 'You have deposited {0}$ of dirty money into your storage.',
        ['takeBlackMoney'] = 'You have taken {0}$ of dirty money from your storage.',
        ['notEnoughBlackMoney'] = 'You dont have enough dirty money.',
        ['notEnoughInStorage'] = 'There is not enough dirty money in your storage.',
    },
    ['de'] = {
        ['price'] = 'Preis: ',
        ['owner'] = 'Besitzer: ',
        ['open'] = 'Öffnen',
        ['closed'] = 'Geschlossen',
        ['houseMenus'] = 'Hausmenü',
        ['clothMenu'] = 'Kleiderschrank',
        ['clothRemoveMenu'] = 'Kleidung - Entfernen',
        ['armoryMenu'] = 'Waffenkammer',
        ['armoryAddWeapon'] = 'Waffenkammer - Waffe verstauen',
        ['armoryAddItem'] = 'Waffenkammer - Gegenstand verstauen',
        ['armoryRemoveWeapon'] = 'Waffenkammer - Waffe entfernen',
        ['armoryRemoveItem'] = 'Waffenkammer - Gegenstand entfernen',
        ['playerDressing'] = 'Kleidung',
        ['removeClothM'] = 'Kleidung entfernen',
        ['putWeapon'] = '[Waffe] Verstauen',
        ['getWeapon'] = '[Waffe] Abholen',
        ['putStock'] = '[Gegenstand] Verstauen',
        ['getStock'] = '[Gegenstand] Abholen',
        ['blackMoneyLabel'] = 'Schwarzes Geld: ',
        ['takeBlackMoneys'] = 'Schwarzes Geld nehmen',
        ['putBlackMoneys'] = 'Schwarzes Geld verstauen',
        ['openCloseHouse'] = 'Haus öffnen/schließen',
        ['refreshName'] = 'Name aktualisieren',
        ['giveKeys'] = 'Hausschlüssel geben',
        ['seeKeys'] = 'Alle Hausschlüssel anzeigen',
        ['house'] = 'Hausmenü',
        ['armory'] = 'Waffenkammer Menü',
        ['housePosTitle'] = 'Hausposition',
        ['housePosLabel'] = 'Hausposition setzen',
        ['houseTypeTitle'] = 'Hausart eingeben',
        ['housePriceTitle'] = 'Hauspreis eingeben',
        ['noowner'] = 'Kein Besitzer',
        ['amount'] = 'Ungültiger Betrag!',
        ['noTargets'] = 'Keine Spieler in der Nähe.',
        ['houseJoin'] = 'Drücke [E] um das Haus zu betreten',
        ['houseLeave'] = 'Drücke [E] um das Haus zu verlassen',
        ['houseArmory'] = 'Drücke [E] um die Waffenkammer zu öffnen',
        ['houseMenu'] = 'Drücke [E] um das Haus zu verwalten',
        ['houseClothes'] = 'Drücke [E] um Kleidung zu wechseln',
        ['removeCloth'] = 'Der Kleidung wurde aus deinem Kleiderschrank entfernt',
        ['houseText'] = 'Diese Immobilie umfasst einen privaten Waffenschrank und für Luxusimmobilien auch einen Kleiderschrank!',
        ['nameupdate'] = 'Name wurde aktualisiert!',
        ['houseClosed'] = 'Dieses Haus ist geschlossen!',
        ['houseOpen'] = 'Haus wurde geöffnet!',
        ['houseClose'] = 'Haus wurde geschlossen!',
        ['notHouse'] = 'Du befindest dich nicht in einem Haus!',
        ['notMyHouse'] = 'Dieses Haus gehört dir nicht!',
        ['ownAlready'] = 'Dieses Haus gehört bereits jemandem!',
        ['nowOwn'] = 'Herzlichen Glückwunsch! Du bist jetzt Hausbesitzer!',
        ['notEnough'] = 'Du hast nicht genug Geld bei dir!',
        ['houseSell'] = 'Du hast dein Haus an den Staat verkauft!',
        ['notSell'] = 'Du kannst das Haus nicht verkaufen, weil es dir nicht gehört!',
        ['onlyHouse'] = 'Du kannst keine weiteren Häuser kaufen! (Du besitzt bereits {0}!)',
        ['houseId'] = 'Haus-ID: {0}',
        ['haveKey'] = '{0} hat bereits den Schlüssel zu deinem Haus!',
        ['giveKey'] = 'Du hast {0} den Schlüssel zu deinem Haus gegeben!',
        ['removeKey'] = 'Du hast den Schlüssel von {0} weggenommen!',
        ['cantGiveKey'] = 'Du kannst keine weiteren Schlüssel vergeben!',
        ['noTarget'] = 'Kein Spieler in der Nähe gefunden.',
        ['getItem'] = 'Abgeholt: {0}x {1}',
        ['putItem'] = 'Verstaut: {0}x {1}',
        ['notEnoughItem'] = 'Nicht genug dabei!',
        ['restart'] = 'Du kannst nichts verstauen oder abholen 1 Minute vor dem Neustart!',
        ['putBlackMoney'] = 'Du hast {0}$ schmutziges Geld in deinem Lager verstaut.',
        ['takeBlackMoney'] = 'Du hast {0}$ schmutziges Geld aus deinem Lager genommen.',
        ['notEnoughBlackMoney'] = 'Du hast nicht genug schmutziges Geld.',
        ['notEnoughInStorage'] = 'Nicht genug schmutziges Geld in deinem Lager.',
    },
}
```
{% endtab %}
{% endtabs %}
