⚙️Configuration

Here's a preview of all the config files of the script

shared/config.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.interactDistance = 2.0 -- Change the distance from where the player can interact with things.
Config.language = "EN" -- Choose Language -> "EN" / "NL".

Config.heistSettings = {
    start = {
        coords = vector4(-1150.6306, -2034.9393, 13.1606 -0.96, 134.4014),
        target = vector3(-1150.6306, -2034.9393, 13.1606),
        ped = "u_m_m_streetart_01", -- You can change the ped to whatever you want. List of peds: https://docs.fivem.net/docs/game-references/ped-models/
        spawned = false, -- Keep this false
        animation = {  -- This will add a animation to the ped, if you don"t want to have a animation set it to false
            dict = "rcmjosh1",
            anim = "idle"
        }
    },
    minCops = 2, -- The minimum number of cops (Config.copJobs) that must be online.
    hackItem = "vaulthacker", -- The item needed to start a robbery and to hack the vault.
    drillItem = "drill", -- The item needed to drill the safes open.
    securityItem = "trojan_usb", -- The item needed to disable the security.
    openDoorTimer = 300, -- Time in seconds for the vault door to open.
    cooldownSettings = {
        globalCooldown = false, -- Choose if you want to use a global or personal cooldown between robberies. Default: personal cooldown
        cooldownTime = 3600 -- Time in seconds between robberies
    },
    -- In blipSettings the blip settings can be adjusted to your own needs. https://docs.fivem.net/docs/game-references/blips/#blip-colors
    blipSettings = {
        colour = 1,
        alpha = 75,
        radius = 75.0
    },
    skillchecks = {
        securitySkillcheck = "volt-lab", -- Choose the hack minigame to disable the security -> "volt-lab" / "OTHER". You can add your own minigames or edit the difficulty in functions.lua
        vaultSkillcheck = "memorygame", -- Choose the hack minigame to open the vault -> "howdy-hackminigame" / "memorygame" / "boii_minigames" / "OTHER". You can add your own minigames or edit the difficulty in functions.lua
        safeSkillcheck = "GTA", -- Choose the hack minigame to open the vault -> "GTA" / "OTHER". You can add your own minigames or edit the difficulty in functions.lua
        safeSkillDiscs = 5 -- The amount of disc's that will be used while using the GTA Skillcheck.
    }
}

-- 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.
-- Also if you don't want to use this function you can change Config.changeBag to false
Config.changeBag = true
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.
Config.skinEvent = 'skinchanger:getSkin' -- Change this event to your own event name.
Config.skinLoadEvent = 'skinchanger:loadClothes' -- Event to update the clothes.

-- The jobs in Config.copJobs will be notified when the alarm of a bank robbery has been triggered.
Config.copJobs = {
    'police',
    'army'
}

-- The jobs in Config.blacklistJobs cannot start a bank robbery.
Config.blacklistJobs = {
    'ambulance',
    'police',
    'mechanic'
}
shared/sv_config.lua
Server = {}

Server.logsWebhook = "WEBHOOK"

Server.heistSettings = {
    rewards = {
        -- In itemRewards the rewards of the deposit boxes can be set. Only items are possible without a specific value.
        -- The player will be rewarded with a random amount of a random item. The amount can be set with mix/maxRewards.
        itemRewards = {
            minRewards = 1,
            maxRewards = 3,
            items = {
                [1] = "goldchain",
                [2] = "diamond_ring",
                [3] = "rolex",
                [4] = "gold"
            }
        },
        -- In moneyRewards the rewards of the cash trolley can be set. Only money and items are possible, weapons are not.
        -- The minimal and maximal amount that the player gets is a random number between min and max
        -- The valueItem & valueAmount paremeters specifies whether the item should have a specific value and the amount of items that will be rewarded.
        -- You then get the specific amount items with a random number between min and max as value. [QBCORE only]
        moneyRewards = {type = "money", label = "Black Money", item = "black_money", valueItem = false, valueAmount = 1, minReward = 100000, maxReward = 200000},
    },
    banks = {
        [1] = {
            name = "LegionSquare",
            label = "Fleeca: Legion Square",
            busy = false, -- Keep this false
            bankOpen = false, -- Keep this false
            disableSecurity = {
                prop = "tr_prop_tr_elecbox_01a",
                coords = vector4(141.8998, -1057.1682, 29.1924, 340.0),
                disabled = false -- Keep this false
            },
            vaultDoorHack = {
                object = GetHashKey("v_ilev_gb_vauldr"),
                heading = {
                    open = 160.0,
                    closed = 250.0
                },
                coords = vector4(147.26, -1046.26, 29.57, 250.0),
                busy = false, -- Keep this false
                hacked = false -- Keep this false
            },
            lootPlacesVault = {
                [1] = {busy = false, opened = false, type = "trolley",coords = vector4(149.887, -1045.1, 29.37, 160)},
                [2] = {busy = false, opened = false, type = "trolley",coords = vector4(151.0132, -1046.6033, 29.3463, 70)},
                [3] = {busy = false, opened = false, type = "safe",coords = vector4(150.3047, -1049.8712, 29.3464, 247.7683)},
                [4] = {busy = false, opened = false, type = "safe",coords = vector4(148.0152, -1050.7388, 29.3464, 161.2101)},
                [5] = {busy = false, opened = false, type = "safe",coords = vector4(146.8572, -1048.4708, 29.3463, 77.3559)},
            },
        },
        [2] = {
            name = "PillboxMotel",
            label = "Fleeca: Pillbox Motel",
            busy = false,
            bankOpen = false,
            disableSecurity = {
                prop = "tr_prop_tr_elecbox_01a",
                coords = vector4(290.85778808594, -294.95199584961, 52.960597991943, 160.0),
                disabled = false
            },
            vaultDoorHack = {
                object = GetHashKey("v_ilev_gb_vauldr"),
                heading = {
                    open = 160.0,
                    closed = 250.0
                },
                coords = vector4(311.59, -284.63, 54.36, 160.0),
                busy = false,
                hacked = false
            },
            lootPlacesVault = {
                [1] = {busy = false, opened = false, type = "trolley", coords = vector4(314.0414, -283.4357, 54.1430, 160)},
                [2] = {busy = false, opened = false, type = "trolley", coords = vector4(315.5294, -284.9855, 54.1430, 70)},
                [3] = {busy = false, opened = false, type = "safe", coords = vector4(314.8351, -288.2431, 54.1431, 69.0979)},
                [4] = {busy = false, opened = false, type = "safe", coords = vector4(312.3922, -289.0302, 54.1431, 342.2792)},
                [5] = {busy = false, opened = false, type = "safe", coords = vector4(311.1674, -286.8487, 54.1430, 251.1207)},
            },
        },
        [3] = {
            name = "LSCBurton",
            label = "Fleeca: Los Santos Customs (Burton)",
            busy = false,
            bankOpen = false,
            disableSecurity = {
                prop = "tr_prop_tr_elecbox_01a",
                coords = vector4(-356.60321044922, -52.700325012207, 53.501689910889, 250.0),
                disabled = false
            },
            vaultDoorHack = {
                object = GetHashKey("v_ilev_gb_vauldr"),
                heading = {
                    open = 160.0,
                    closed = 250.0
                },
                coords = vector4(-353.47, -55.48, 49.24, 160.0),
                busy = false,
                hacked = false
            },
            lootPlacesVault = {
                [1] = {busy = false, opened = false, type = "trolley", coords = vector4(-350.9681, -54.1383, 49.0148, 160)},
                [2] = {busy = false, opened = false, type = "trolley", coords = vector4(-349.6494, -55.7487, 49.0148, 70)},
                [3] = {busy = false, opened = false, type = "safe", coords = vector4(-350.2295, -59.0387, 49.0149, 69.5732)},
                [4] = {busy = false, opened = false, type = "safe", coords = vector4(-352.5525, -59.9455, 49.0149, 345.9050)},
                [5] = {busy = false, opened = false, type = "safe", coords = vector4(-353.8898, -57.7005, 49.0148, 252.6358)},
            },
        },
        [4] = {
            name = "lifeinvaders",
            label = "Fleeca: Life Invaders",
            busy = false,
            bankOpen = false,
            disableSecurity = {
                prop = "tr_prop_tr_elecbox_01a",
                coords = vector4(-1200.4261474609, -340.24551391602, 36.577262878418, 115.0),
                disabled = false
            },
            vaultDoorHack = {
                object = GetHashKey("v_ilev_gb_vauldr"),
                heading = {
                    open = 160.0,
                    closed = 250.0
                },
                coords = vector4(-1210.40, -336.42, 37.98, 160.0),
                busy = false,
                hacked = false
            },
            lootPlacesVault = {
                [1] = {busy = false, opened = false, type = "trolley", coords = vector4(-1209.6520, -333.7449, 37.7592, 160)},
                [2] = {busy = false, opened = false, type = "trolley", coords = vector4(-1207.5869, -333.8501, 37.7592, 70)},
                [3] = {busy = false, opened = false, type = "safe", coords = vector4(-1205.5974, -336.5465, 37.7593, 123.2655)},
                [4] = {busy = false, opened = false, type = "safe", coords = vector4(-1206.6868, -338.7795, 37.7593, 27.2197)},
                [5] = {busy = false, opened = false, type = "safe", coords = vector4(-1208.8635, -338.1328, 37.7593, 291.2927)},
            },
        },
        [5] = {
            name = "highway",
            label = "Fleeca: Highway",
            busy = false,
            bankOpen = false,
            disableSecurity = {
                prop = "tr_prop_tr_elecbox_01a",
                coords = vector4(-2948.4768066406, 486.93023681641, 14.450967788696, 170.0),
                disabled = false
            },
            vaultDoorHack = {
                object = GetHashKey("hei_prop_heist_sec_door"),
                heading = {
                    open = 160.0,
                    closed = 250.0
                },
                coords = vector4(-2956.50, 482.06, 15.90, 350.0),
                busy = false,
                hacked = false
            },
            lootPlacesVault = {
                [1] = {busy = false, opened = false, type = "trolley", coords = vector4(-2958.4995, 484.0596, 15.6753, 270)},
                [2] = {busy = false, opened = false, type = "trolley", coords = vector4(-2957.3193, 485.7986, 15.6753, 180)},
                [3] = {busy = false, opened = false, type = "safe", coords = vector4(-2953.9014, 486.3755, 15.6754, 4.7109)},
                [4] = {busy = false, opened = false, type = "safe", coords = vector4(-2952.5554, 484.2612, 15.6754, 272.2295)},
                [5] = {busy = false, opened = false, type = "safe", coords = vector4(-2954.0576, 482.3837, 15.6753, 175.3552)},
            },
        },
        [6] = {
            name = "sandyshores",
            label = "Fleeca: Route 68",
            busy = false,
            bankOpen = false,
            disableSecurity = {
                prop = "tr_prop_tr_elecbox_01a",
                coords = vector4(1176.6029052734, 2721.8640136719, 37.00415802002, 180.0),
                disabled = false
            },
            vaultDoorHack = {
                object = GetHashKey("hei_prop_heist_sec_door"),
                panel = GetHashKey("v_corp_bk_secpanel"),
                heading = {
                    open = 0.5,
                    closed = 90.0
                },
                coords = vector4(1175.6130371094, 2712.90625, 38.288074493408, 90),
                busy = false,
                hacked = false
            },
            lootPlacesVault = {
                [1] = {busy = false, opened = false, type = "trolley", coords = vector4(1173.7284, 2710.7322, 38.0662, 0)},
                [2] = {busy = false, opened = false, type = "trolley", coords = vector4(1171.8621, 2711.9307, 38.0662, 270)},
                [3] = {busy = false, opened = false, type = "safe", coords = vector4(1171.2174, 2715.2002, 38.0663, 86.9793)},
                [4] = {busy = false, opened = false, type = "safe", coords = vector4(1173.3442, 2716.8516, 38.0663, 1.4337)},
                [5] = {busy = false, opened = false, type = "safe", coords = vector4(1175.2206, 2715.1501, 38.0663, 275.2075)},
            },
        }
    }
}
language.lua
Language = {
    ["EN"] = {
        ["targetStartHeist"] = "Start heist",
        ["targetVaultHack"] = "Hack system",
        ["targetSecurity"] = "Disable security",
        ["targetLootMoney"] = "Loot money",
        ["targetLootSafe"] = "Drill safe",
        
        ["alreadyDoing"] = "Someone is already doing this",
        ["missingItem"] = "You are missing something to do this",
        ["noCops"] = "There are insufficient authorities employed",
        ["globalCooldown"] = "A bank robbery is already in progress",
        ["personalCooldown"] = "You have already started a bank robbery",
        ["startedHeist"] = "Disable the security near %s",
        ["availableHeists"] = "Available heists",
        ["breached"] = "Security successfully breached, vault door will open in a few minutes",

        ["securedMoney"] = "The cash trolley has been successfully secured",
        ["securedSafe"] = "Deposit box is still closed",
        ["blacklistJobs"] = "You are a cop. You can't start a robbery!",

        ["dispatchBlip"] = "Bankrobbery",
        ["dispatchAlarm"] = "Active bankrobbery at a Fleeca Bank",

        ["logsTitle"] = "Markhor Bankrobbery",
        ["logHeistStarted"] = "A robbery has been started by: \n**Identifier: *%s*** \n**Name: *%s*** \n **Bank: *%s (%s)* **",
        ["logAddedItem"] = "**Player: *%s (Player ID: %s)*\n has received ***%sx %s***",
        ["logAddedItemWorth"] = "**Player: *%s (Player ID: %s)***\n has received ***%sx %s*** with a value of ***$%s***",
        ["logRemovedItem"] = "**Player: *%s (Player ID: %s)***\n has removed ***%sx %s***",
        ["logAddedMoney"] = "**Player: *%s (Player ID: %s)***\n has received ***$%s (%s)***"
    },

    ["NL"] = {
        ["targetStartHeist"] = "Start heist",
        ["targetVaultHack"] = "Hack systeem",
        ["targetSecurity"] = "Beveiliging uitschakelen",
        ["targetLootMoney"] = "Pak geld",
        ["targetLootSafe"] = "Kluis uitboren",

        ["alreadyDoing"] = "Iemand is al bezig met dit",
        ["missingItem"] = "Je mist iets om dit te doen",
        ["noCops"] = "Er zijn onvoldoende autoriteiten in dienst",
        ["globalCooldown"] = "Er is al een bankoverval gaande",
        ["personalCooldown"] = "Je hebt al een bankoverval gestart",
        ["startedHeist"] = "Schakel de beveiliging uit in de buurt van %s",
        ["availableHeists"] = "Beschikbare overvallen",
        ["breached"] = "Beveiliging succesvol gekraakt, kluis wordt geopend in een aantal minuten",

        ["securedMoney"] = "Geldwagen is succesvol veilliggesteld",
        ["securedSafe"] = "Kluis is nog gesloten",
        ["blacklistJobs"] = "Je bent een agent. Je kan deze actie niet uitvoeren!",

        ["dispatchBlip"] = "Bank overval",
        ["dispatchAlarm"] = "Actieve bank overval bij een Fleeca Bank",

        ["logsTitle"] = "Markhor Bankrobbery",
        ["logHeistStarted"] = "Er is een overval gestart door: \n**Identifier: *%s*** \n**Name: *%s*** \n **Bank: *%s (%s)* **",
        ["logAddedItem"] = "**Speler: *%s (Speler ID: %s)***\n heeft ***%sx %s*** ontvangen",
        ["logAddedItemWorth"] = "**Speler: *%s (Speler ID: %s)***\n heeft ***%sx %s*** met een waarde van ***$%s*** ontvangen",
        ["logRemovedItem"] = "**Speler: *%s (Speler ID: %s)***\n heeft ***%sx %s*** verwijderd",
        ["logAddedMoney"] = "**Speler: *%s (Speler ID: %s)***\n heeft ***$%s (%s)*** ontvangen"
    },

}
client/open_functions.lua
securityMinigame = function()
    if Config.heistSettings.skillchecks.securitySkillcheck then
        local p = promise.new()
        TriggerEvent('ultra-voltlab', 60, function(result, reason)
            if result == 0 then
                p:resolve(false)
            elseif result == 1 then
                p:resolve(true)
            elseif result == 2 then
                p:resolve(false)
            elseif result == -1 then
                p:resolve(false)
                print('Error occured',reason)
            end
        end)
        return Citizen.Await(p)
    else
        -- Put your own code here
    end
end

vaultMinigame = function()
    if Config.heistSettings.skillchecks.vaultSkillcheck == "howdy-hackminigame" then
        return exports['howdy-hackminigame']:Begin(1, 15000)
    elseif Config.heistSettings.skillchecks.vaultSkillcheck  == "memorygame" then
        local p = promise.new()
        exports["memorygame"]:thermiteminigame(10, 3, 3, 10,
            function() -- success
                p:resolve(true)
            end,
            function() -- failure
                p:resolve(false)
            end
        )
        return Citizen.Await(p)
    elseif Config.heistSettings.skillchecks.vaultSkillcheck == "boii_minigames" then
        local p = promise.new()
        exports['boii_minigames']:chip_hack({
            style = 'default',
            loading_time = 8000, 
            chips = 2,
            timer = 20000 
        }, function(success)
            p:resolve(success)
        end)
        return Citizen.Await(p)
    else
        -- Add your own minigame here
    end
end

safeMinigame = function()
    if Config.heistSettings.skillchecks.safeSkillcheck == "GTA" then
        local p = promise.new()
        TriggerEvent("markhor_bankrobbery:client:drill", function(success)
            if success then
                p:resolve(true)
            else
                p:resolve(false)
            end
        end)
        return Citizen.Await(p)
    else
        -- Add your own minigame here
    end
end

Last updated