# Configuration

{% code title="server/config.lua" lineNumbers="true" %}

```lua
Server = {}

Server.discordWebhook = "" -- Add webhook for Discord logs https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks

-- With this function it is possible to add logging in the way you want! The function is called server side.
Server.writeLog = function(src, logLine)
    local identifier = GetPlayerIdentifiers(src)[1]
    exports["markhor_bridge"]:sendLog(Server.discordWebhook, "Markhor Containers", string.format("%s - %s", identifier, logLine))
end
```

{% endcode %}

{% code title="shared/config.lua" lineNumbers="true" %}

```lua
Config = {}

--- [[ Markhor Bridge ]] ---
--- [[ Markhor Bridge ]] ---


--- This resource depends on Markhor Bridge.
--- With Markhor Bridge, all necessary settings (such as framework, inventory, interact, etc.) are automatically set.
--- You don't have to do anything except install Markhor Bridge.


--- [[ Markhor Bridge ]] ---
--- [[ Markhor Bridge ]] ---

Config.targetDistance = 2.0 -- Change the distance from where target is triggered. Default: 2.0
Config.language = "EN" -- Choose Language -> "EN" / "NL".
Config.skinEvent = 'skinchanger:getSkin' -- Change this event to your own event name.
Config.skinLoadEvent = 'skinchanger:loadClothes' -- Event to update the clothes.
Config.item = {'tool'} -- Add here the item(s) that should be used to open a container.

Config.breakChance = 5 -- Percent chance of the items "breaking". 1 piece of each item in Config.item is removed
Config.requiredCopCount = 0 -- Number of agents required to open a container.
Config.alarmChance = 50 -- The probability percentage that an alarm will sound as soon as a container is opened.
Config.blipTimer = 15 -- Blip timer in seconds

-- Below is a time frame, within this IR time it is possible to open a container
-- These times are included in a 24-hour clock and therefore range from 00:00 to 23:59
-- We use the system time of the server on which the FiveM server is hosted
Config.useTimeFrame = true -- Once this value is set to false, a container can always be opened. This is then not linked to time
Config.startTimeFrame = "20:30" -- Containers can be opened starting at 8:30 PM
Config.endTimeFrame = "02:00" -- Containers cannot be opened after 2 AM

-- The jobs in Config.blacklistJobs are blacklisted for the option to open a container.
Config.blacklistJobs = {
    -- 'police',
    'army'
}

-- The jobs in Config.alertJobs are alerted when a container is opened.
Config.alertJobs = {
    'police',
    'army'
}

-- In Config.blips the blip settings can be adjusted for the alarm.
Config.blips = {
    alarm = {
        sprite = 161,
        scale = 2.0,
        colour = 3,
        flashes = true,
        text = "",
        time = Config.blipTimer,
        radius = 0,
    }
}

-- Once the loot has been picked up, the player receives a bag. This bag is the number of Config.replaceBag. 
-- If a player already has a bag with a matching number in Config.maleBags or Config.womanBags, 
-- this option will be skipped and the player will keep the bag that the player already has.
Config.maleBags = {40,41,44,45,81,82,85,86,102,103,109,112,113,114}
Config.womanBags = {40,41,44,45,81,82,85,86,104,107,108,109,110}
Config.replaceBag = 45 -- The default bag a player receives when the player does not have a bag from Config.maleBags or Config.womanBags.

-- In Config.rewards the reward for an container robbery can be set. Only money and items are possible, weapons are not.
-- The number/amount that the player gets is a random number between min and max.
-- The valueItem parameter specifies whether the item should have a specific value. You then get one item with a random number between min and max as value. [QBCORE only]
Config.rewards = {
    { type = 'item', label = 'Bread', item = 'bread', valueItem = false, min = 1, max = 5, percentage = 100},
    { type = 'item', label = 'Black Money', item = 'markedbills', valueItem = true, min = 50, max = 60, percentage = 100},
    { type = 'account', label = 'Bank', item = 'bank', valueItem = false, min = 300, max = 500, percentage = 100},
}

-- With this function it is possible to add a custom way to the police alert. The function is called server side.
Config.policeAlert = function(src, position)
    Config.blips.alarm.text = Language[Config.language].blipName
    exports["markhor_bridge"]:sendPoliceAlert(src, position, Language[Config.language].blipName, Language[Config.language].alarm, Config.blips.alarm, Config.alertJobs)
end

-- Add a container, make sure to copy all options. The only thing that needs to be adjusted is the "pos" and "heading", enter the coordinates of the container here.
Config['containers'] = {
    {
        pos = vector3(2930.38, 4322.7, 50.58), -- ONLY Change the pos coords
        heading = 295.70, -- ONLY Change the heading
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false}, -- Don't change the lock pos coords
        table = vector3(0.0, 0.0, 0.0), -- Don't change the table coords
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false}, -- Don't change golds pos coords
        } 
    },
    {
        pos = vector3(2710.55, 4334.88, 45.85), 
        heading = 213.74, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(1764.03, 3651.45, 34.49), 
        heading = 205.00, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(878.16, 2876.40, 56.70), 
        heading = 336.60, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        }
    },
    {
        pos = vector3(1213.07, 2729.72, 38.01), 
        heading = 0.64, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(653.53, 681.99, 128.91), 
        heading = 337.00, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(-132.72, -1179.03, 25.29), 
        heading = 272.83, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        guard = {pos = vector3(0.0, 0.0, 0.0)},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(2615.16, 3270.87, 55.25), 
        heading = 61.74, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(2429.48, 3125.09, 48.14), 
        heading = 179.14, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(869.13, 2349.44, 51.70), 
        
        heading = 93.31, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(59.46, 152.27, 104.63), 
        heading = 159.88, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(490.73, -520.13, 24.75), 
        heading = 356.63, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(699.14, -1257.20, 26.16), 
        heading = 178.57, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(991.00, -1246.83, 25.36), 
        heading = 125.64, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(1336.86, -690.92, 66.24), 
        heading = 73.35, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(980.98, -85.12, 74.35), 
        heading = 46.40, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(857.93, -951.37, 26.28), 
        heading = 262.52, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(974.07, -1711.14, 30.19), 
        heading = 265.91, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(749.89, -1842.27, 29.29), 
        heading = 264.85, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(506.82, -2120.62, 5.92), 
        heading = 127.46, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(900.19, -2536.89, 28.29), 
        heading = 354.35, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(463.11, -3280.26, 6.07), 
        heading = 177.81, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(270.63, -3154.56, 5.79), 
        heading = 29.95, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(4.32, -2740.82, 6.00), 
        heading = 88.71, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(-472.42, -2682.03, 10.82), 
        heading = 42.21, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(-2625.95, 2950.25, 9.20), 
        heading = 301.66, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(-572.38, 5368.54, 70.23), 
        heading = 71.01, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(-180.68, 6308.90, 31.49), 
        heading = 62.22, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(1421.24, 6354.51, 23.99), 
        heading = 24.60, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(2192.37, 5577.04, 53.81), 
        heading = 0.68, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(3693.24, 4568.86, 25.14), 
        heading = 2.93, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(1732.34, 4777.00, 41.91), 
        heading = 257.77, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(59.29, 3701.27, 39.75), 
        heading = 145.46, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(662.82, 3496.82, 33.85), 
        heading = 273.83, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(2172.64, 3379.22, 45.40), 
        heading = 45.40, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(1562.48, 2183.65, 78.89), 
        heading = 90.07, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    },
    {
        pos = vector3(1110.68, 46.78, 80.76), 
        heading = 86.99, 
        lock = {pos = vector3(0.0, 0.0, 0.0), taken = false},
        table = vector3(0.0, 0.0, 0.0),
        golds = {
            {pos = vector3(0.0, 0.0, 0.0), taken = false},
        } 
    }
}shared/shared/config.lua
```

{% endcode %}

{% code title="language.lua" lineNumbers="true" %}

```lua
Language = {
	["EN"] = {
		["startCut"] = "Press ~INPUT_PICKUP~ to open the container",
		["startGather"] = "Press ~INPUT_PICKUP~ to collect the items",
		["targetLabel"] = "Open container",
		["targetLoot"] = "Get loot",
		["targetTooFar"] = "You're too far away!",
		["areCop"] = "You're a cop. You cannot open this container!",
		["needItem"] = "You need a %s",
		["itemBroke"] = "Your %s broke",
		["receivedAccount"] = "You have found ~r~$%i %s ~w~. ~g~Congratulations!",
		["receivedItem"] = "You have found ~r~%ix %s ~w~. ~g~Congratulations!",
		["inventoryFull"] = "Your inventory is full, so your %s is gone",
		["lessCops"] = "Too few cops to start the robbery!",
		["alarm"] = "A container has been opened!",
		["blipName"] = "Container robbery",
		["timeFrame"] = "A container can only be opened between 8:30 PM and 2:00 AM",

		["logOpenedContainer"] = "is opening a container. Coords: %s",
		["logReceivedAccount"] = "received $%s %s",
		["logReward"] = "received %s %s",
	},

	["NL"] = {
		["startCut"] = "Druk op ~INPUT_PICKUP~ om te slijpen",
		["startGather"] = "Druk op ~INPUT_PICKUP~ om de items te verzamelen",
		["targetLabel"] = "Open container",
		["targetLoot"] = "Get loot",
		["targetTooFar"] = "You're too far away!",
		["areCop"] = "Je bent een agent. Je kan deze container niet openen!",
		["needItem"] = "Je hebt een %s nodig",
		["itemBroke"] = "Jouw %s is kapot gegaan",
		["receivedAccount"] = "Je hebt ~r~$%i %s ~w~gevonden. ~g~Gefeliciteerd!",
		["receivedItem"] = "Je hebt ~r~%ix %s ~w~gevonden. ~g~Gefeliciteerd!",
		["inventoryFull"] = "Je inventory zit vol, hierdoor is je %s verdwenen",
		["lessCops"] = "Te weinig agenten om de overval te starten!",
		["alarm"] = "Er is een container geopend!",
		["blipName"] = "Container overval",
		["timeFrame"] = "Een container kan alleen tussen 20:30 uur en 02:00 uur worden geopend",

		["logOpenedContainer"] = "is een container aan het openen. Coords: %s",
		["logReceivedAccount"] = "ontving $%s %s",
		["logReward"] = "ontving %s %s",
	}
}
```

{% endcode %}

{% code title="main.lua" lineNumbers="true" %}

```lua
ContainerAnimation = {
    ['objects'] = {
        'tr_prop_tr_grinder_01a',
        'ch_p_m_bag_var02_arm_s'
    },
    ['animations'] = {
        {'action', 'action_container', 'action_lock', 'action_angle_grinder', 'action_bag'}
    },
    ['scenes'] = {},
    ['sceneObjects'] = {}
}

GrabGold = {
    ['objects'] = {
        'hei_p_m_bag_var22_arm_s'
    },
    ['animations'] = {
        {'enter', 'enter_bag'},
        {'grab', 'grab_bag', 'grab_gold'},
        {'grab_idle', 'grab_idle_bag'},
        {'exit', 'exit_bag'},
    },
    ['scenes'] = {},
    ['scenesObjects'] = {}
}
```

{% endcode %}


---

# 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.markhorscripts.com/home/scripts/markhor-containers/configuration.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.
