Config settings

Config = {}
Config.Debug = false -- Set to true if you want to see debug messages
Config.VersionCheck = true -- Set to false if you don't want console notifications when update is available

Config.Framework = "esx"
--[[
    Supported Frameworks:
        • esx | https://github.com/esx-framework/esx-legacy
        • qb | https://github.com/qbcore-framework/qb-core
]]

Config.FrameworkEvents = { -- Change these events if you changed their name in your framework script
    esx = { 
        resource_name = 'es_extended',
        main = 'esx:getSharedObject',
        load = 'esx:playerLoaded',
        job = 'esx:setJob'
    },
    qbcore = { 
        resource_name = 'qb-core',
        main = 'QBCore:GetObject',
        load = 'QBCore:Client:OnPlayerLoaded',
        job = 'QBCore:Client:OnJobUpdate',
        gang = 'QBCore:Client:OnGangUpdate',
    }
}

Config.Notifications = "okokNotify" -- Leave empty and edit extra/notify.lua if you want to use other notifications
--[[
    Supported Notifications:
        • esx
        • qb
        • okokNotify
        • pNotify
        • ps-ui
]]

Config.Target = "ox_target" -- Target script
--[[
    Supported Targets:
        • ox_target
        • qb-target
]]

Config.ProgressBar = "custom" -- Leave empty if you don't want to use progress bar
--[[
    Supported Progress Bars:
        • qb
        • custom (edit extra/progressBar.lua to work with your progressBar)
]]

Config.UseOXLibMenu = false -- Whether ox_lib menu should be used instead of custom UI. If you set this to true make sure to uncomment one line inside fxmanifest.lua

Config.Peds = {
    ['robbery_start'] = { -- Ped that orders robbery
        coords = vector3(-327.73, -736.88, 32.98), -- Ped coords
        heading = 168.0, -- Ped heading
        scenario = 'WORLD_HUMAN_AA_SMOKE', -- Scenario from https://github.com/DioneB/gtav-scenarios. Leave empty if you dont want any
        model = 'a_m_y_business_01', -- Ped model from https://docs.fivem.net/docs/game-references/ped-models/
        targetDistance = 2.0, -- Distance from which player will be able to interact with ped
        requiredItem = "" -- Item name required to talk with this ped
    },
    ['hacking_guy'] = { -- Ped that sells hacking device
        coords = vector3(463.47, -770.87, 26.38),
        heading = 66.0, -- Ped heading
        scenario = 'WORLD_HUMAN_STAND_MOBILE', -- Scenario from https://github.com/DioneB/gtav-scenarios. Leave empty if you dont want any
        model = 'a_m_m_socenlat_01', -- Ped model from https://docs.fivem.net/docs/game-references/ped-models/
        targetDistance = 2.0 -- Distance from which player will be able to interact with ped
    },
    ['dealer'] = { -- Ped that buys items from robberies
        coords = vector3(73.63, -873.49, 29.47),
        heading = 110.0, -- Ped heading
        scenario = 'WORLD_HUMAN_SMOKING_POT', -- Scenario from https://github.com/DioneB/gtav-scenarios. Leave empty if you dont want any
        model = 'a_m_m_eastsa_01', -- Ped model from https://docs.fivem.net/docs/game-references/ped-models/
        targetDistance = 2.0, -- Distance from which player will be able to interact with ped
        requiredItem = "" -- Item name required to talk with this ped
    }
}

Config.Hacking = {
    itemName = 'hacking_device', -- Hacking device name. Make sure to add it to your inventory script in order for robbery to work
    limit = 1, -- Maximum amount of hacking devices in player inventory. Set to 0 if you don't want any limit
    price = 1500, -- Price for hacking device
    canPayWithBank = false, -- Whether player can pay with bank money
    removeAfterUse = true -- Whether item should be removed after ONE use
}

Config.MapBlip = { -- For blip settings visit: https://docs.fivem.net/docs/game-references/blips/
    start = { -- Ped that orders heist
        enabled = true, -- Set to false if you dont want to mark that ped on map
        label = "Office Robbery",
        sprite = 475,
        scale = 0.75,
        color = 2
    },
    hacker = { -- Hacker that sells hacking device
        enabled = true, -- Set to false if you dont want to mark that ped on map
        label = "Hacker friend",
        sprite = 521,
        scale = 0.75,
        color = 2
    },
    office_position = { -- Office entry position
        enabled = true, -- Set to false if you dont want to mark that on map
        label = "Office Entry",
        sprite = 134,
        scale = 0.75,
        color = 2
    },
    merchant = {
        enabled = true, -- Set to false if you dont want to mark that ped on map
        label = "Item Dealer",
        sprite = 276,
        scale = 0.75,
        color = 2
    },
    police_blip = { -- To edit blip function go to extra/police_cl.lua and extra/police_sv.lua
        label = "Office Robbery in progress",
        sprite = 161,
        scale = 1.4,
        color = 3
    }
}

Config.MinimumPolice = 0 -- Minimum amount of police officers required to start a heist
Config.PoliceJob = "police" -- Name of police job
Config.PoliceBlipTimer = 5 -- Time (in minutes) after which robbery blip will dissapear
Config.HeistCooldown = 0 -- Global ooldown (in minutes) after ending a heist. Applies to every player.
Config.MultipleRobberies = true -- Whether other players are able to start a robbery when one is in progress
Config.BlackListJobs = {"police", "ambulance"} -- Players with this jobs won't be able to start a heist
Config.CanTurnOffSecurity = true -- Whether player can turn off security using Hacking Device
Config.CanHackMultipleTimes = false -- Whether player can turn off security multiple times by hacking it again
Config.SecurityOfflineTime = { -- Minimum and maximum time (in seconds) that security can be turned off using Hacking Device
    min = 10, -- 10-15 is good for all robberies but you can change it if you want to :))
    max = 15
}
Config.UseLasers = true -- Whether lasers should be used as one of main security assets (Might affect performance, higher CPU usage when inside office)
Config.CancelByDistance = true -- Whether robbery should be cancelled when player already been inside but left and went away from the entry door
Config.CancelDistance = 100.0 -- Distance after which robbery will be cancelled

Config.UseRoutingBuckets = false -- Whether player should be send to solo session (only inside interior) to avoid meeting other players

Config.PossibleEntries = { -- List of possible office entries, one of them will be chosen at the beggining of the robbery
    --@param coords vector3 Position outside of the building
    --@param difficultyLevel table This position can be used for specified diffucilty level that player chose at the beggining
    {coords = vector3(-58.9, -616.41, 37.4), difficultyLevel = {'easy', 'medium', 'hard'}},
    {coords = vector3(-124.97, -637.48, 40.74), difficultyLevel = {'easy', 'medium', 'hard'}},
    {coords = vector3(4.65, -705.95, 46.02), difficultyLevel = {'easy', 'medium', 'hard'}},
    {coords = vector3(-70.92, -801.04, 44.28), difficultyLevel = {'easy', 'medium', 'hard'}},
    {coords = vector3(-212.69, -728.19, 33.58), difficultyLevel = {'easy', 'medium', 'hard'}},
    {coords = vector3(-267.49, -739.09, 34.47), difficultyLevel = {'easy', 'medium', 'hard'}},
    {coords = vector3(-287.68, -1061.36, 27.26), difficultyLevel = {'easy', 'medium', 'hard'}},
    {coords = vector3(7.35, -933.07, 29.95), difficultyLevel = {'easy', 'medium', 'hard'}},
    {coords = vector3(-197.33, -831.37, 30.8), difficultyLevel = {'easy', 'medium', 'hard'}},
    {coords = vector3(-290.34, -431.35, 30.29), difficultyLevel = {'easy', 'medium', 'hard'}},
    {coords = vector3(-366.18, -355.52, 31.61), difficultyLevel = {'easy', 'medium', 'hard'}},
}

Config.ShowLootBlips = true -- Whether loot should be marked on map
Config.ShowLootText = false -- Whether there should be a text in bottom-right showing loot taken/max loot from current location (see: https://i.imgur.com/VXr17Os.png)
Config.Loot = { -- ⚠️ LEAVE IT LIKE THIS IF YOU FOLLOWED README.MD OR CUSTOMIZE IT IF YOU KNOW WHAT YOU ARE DOING ⚠️
    [1] = { -- Easy robbery
        {coords = vector3(1006.1, -3175.76, -38.65), heading = 150.0, model = 'ch_prop_ch_trophy_monkey_01a', item = 'golden_banana', amount = 1, name = 'Golden Banana', pickupTime = 3000},
        {coords = vector3(998.95, -3145.66, -39.90), heading = 18.0, model = 'hei_heist_acc_artgolddisc_04', item = 'golden_disc', amount = 1, name = 'Golden Disc', pickupTime = 3000},
        {coords = vector3(998.51, -3169.19, -34.02), heading = 201.0, model = 'xm_prop_x17_laptop_avon', item = 'lapto', amount = 1, name = 'Laptop', pickupTime = 3000},
    },
    [2] = { -- Medium robbery
        {coords = vector3(-137.99, -642.74, 168.26), heading = 150.0, model = 'xm_prop_x17_laptop_avon', item = 'lapto', amount = 1, name = 'Laptop', pickupTime = 3000},
        {coords = vector3(-149.74, -645.32, 168.80), heading = 150.0, model = 'hei_prop_heist_gold_bar', item = 'gold_bar', amount = 1, name = 'Golden bar', pickupTime = 3000},
        {coords = vector3(-125.75, -638.28, 168.77), heading = 150.0, model = 'bkr_prop_coke_doll', item = 'doll', amount = 1, name = 'Doll', pickupTime = 3000},
        {coords = vector3(-126.18, -633.44, 168.56), heading = 150.0, model = 'bkr_prop_biker_case_shut', item = 'money_case', amount = 1, name = 'Case with money', pickupTime = 3000},
        {coords = vector3(-144.70, -637.21, 168.62), heading = 150.0, model = 'ba_prop_battle_trophy_no1', item = 'trophy', amount = 1, name = 'Trophy', pickupTime = 3000},
        {coords = vector3(-133.62, -637.00, 168.77), heading = 150.0, model = 'v_res_d_dildo_f', item = 'dildoo', amount = 1, name = 'Dildo', pickupTime = 3000},
    },
    [3] = { -- Hard robbery
        {coords = vector3(-783.85, 338.71, 216.29), heading = 217.0, model = 'xm_prop_x17_laptop_avon', item = 'lapto', amount = 1, name = 'Laptop', pickupTime = 3000},
        {coords = vector3(-780.91, 339.74, 216.51), heading = 291.0, model = 'ex_prop_exec_award_gold', item = 'gold_figure', amount = 1, name = 'Golden Figure', pickupTime = 3000},
        {coords = vector3(-783.30, 327.63, 216.95), heading = 239.0, model = 'v_res_jewelbox', item = 'jewel_box', amount = 1, name = 'Jewelery Box', pickupTime = 3000},
        {coords = vector3(-798.74, 328.21, 216.62), heading = 0.0, model = 'bkr_prop_biker_case_shut', item = 'money_case', amount = 1, name = 'Case with money', pickupTime = 3000},
        {coords = vector3(-791.28, 331.79, 219.44), heading = 0.0, model = 'prop_cs_shopping_bag', item = 'shopping_bag', amount = 1, name = 'Shopping Bag', pickupTime = 3000},
        {coords = vector3(-797.68, 326.34, 219.44), heading = 102.0, model = 'prop_cs_shopping_bag', item = 'shopping_bag', amount = 1, name = 'Shopping Bag', pickupTime = 3000},
        {coords = vector3(-805.50, 331.87, 220.13), heading = 195.0, model = 'prop_jewel_02a', item = 'golden_watch', amount = 1, name = 'Golden Watch', pickupTime = 3000},
    }
}

Config.GiveBlackMoney = false -- Whether black money should be given for selling items
Config.BlackMoneyName = "blackmoney" -- ⚠️ QB ONLY ⚠️ Name for black money account
Config.SellCooldown = 3 -- Cooldown (in seconds) after selling items (prevents any exploits)
Config.LootPrice = { -- Table of items that can be sold to dealer with price for single one
    ['trophy'] = 3500, -- 1x Trophy will give player 3500$
    ['doll'] = 2500, -- 1x Doll will give player 2500$ etc...
    ['dildoo'] = 3000,
    ['gold_bar'] = 5000,
    ['lapto'] = 3500,
    ['money_case'] = 10000,
    ['golden_banana'] = 5000,
    ['golden_disc'] = 7500,
    ['gold_figure'] = 6000,
    ['jewel_box'] = 4000,
    ['shopping_bag'] = 3000,
    ['golden_watch'] = 9000,
}

Language = { -- Customize your translation here ⚠️ EDIT ONLY RIGHT SIDE ⚠️
    ["NOTIFY_TITLE"] = "Office Robbery",
    ["START_ROBBERY"] = "Start Office Robbery",
    ["END_ROBBERY"] = "Finish Office Robbery",
    ["CANT_BUY"] = "I have nothing for you sir",
    ["BUY_DEVICE"] = "Pay %s$ for Device",
    ["NO_MONEY_OR_SPACE"] = "You don't have enough money or space in your inventory",
    ["BUY_COMPLETE"] = "You have successfully bought Hacking Device for %s$",
    ["RECENTLY_ROBBED"] = "You have to wait %s minutes before robbing this office",
    ["ALREADY_ROBBING"] = "You are already robbing an office!",
    ["OTHER_ROBBERY_IN_PROGRESS"] = "There is already a robbery in progress!",
    ["NOT_ENOUGH_COPS"] = "There is not enough cops to start this robbery!",
    ["ROBBERY_STARTED"] = "Robbery started!",
    ["GO_TO_HACKER"] = "Visit my friend, he can help you with some security problems you might encounter",
    ["GO_YOLO"] = "If you think that you can handle it alone, you can try without his help",
    ["OFFICE_BLIP"] = "Office entry has been marked on your map, good luck!",
    ["HACKER_BLIP"] = "I have marked his position on your map",
    ["DONT_HAVE_DEVICE"] = "You don't have Hacking Device to perform this action!",
    ["PICKUP_LOOT"] = "Pick up %s",
    ["PICKED_UP"] = "You have picked up %s",
    ["PICKING_UP"] = "Picking up %s...",
    ["PICKED_ALL"] = "You grabbed all loot from this office, get out of there!",
    ["SELL_ITEMS"] = "Items that you stole can be sold at the merchant",
    ["ROBBERY_SUCCESSFUL"] = "Robbery successful!",
    ["TOO_FAR_FROM_OFFICE"] = "Robbery cancelled, you went too far from the office!",
    ["SELL_ALL_ITEMS"] = "Sell all loot",
    ["SOLD"] = "You have sold all loot for %s$",
    ["NOTHING_TO_SELL"] = "You don't have any loot to sell",
    ["SELL_SLOW_DOWN"] = "You have to wait %s seconds before selling items",
    ["POLICE_ALERT"] = "Alarm triggered in the office at %s street",
    ["CAUGHT"] = "Shit, alarm has been triggered. I have to hurry!",
    ["LOCKPICK_DOOR"] = "Lockpick doors",
    ["LOCKPICK_FAIL"] = "Lockpick failed, try again",
    ["YOU_ARE_IN"] = "You are inside, be careful and grab all the loot!",
    ["YOU_ARE_IN_DEVICE"] = "If you own a hacking device, you can use it near a keypad",
    ["LEAVE_OFFICE"] = "Leave office",
    ["ENTER_OFFICE"] = "Enter office",
    ["HACK_SECURITY"] = "Hack security",
    ["SECURITY_OFF"] = "You have successfully hacked security in the building. It will be off for around %s seconds",
    ["SECURITY_BACK_ON"] = "Security is back, be careful!",
    ["LOOT_FOUND"] = "LOOT FOUND",

    ["CANT_HACK_AGAIN"] = "You can't hack the security again!",
    ["NOT_INTRESTED"] = "I have nothing to talk with you about"
}

HTML_Language = {
    -- HTML PART --
    ["ROBBERY_1"] = "Robbery I",
    ["ROBBERY_2"] = "Robbery II",
    ["ROBBERY_3"] = "Robbery III",
    ["EASY"] = "Easy 🟢",
    ["EASY_DESC"] = "Easiest robbery, even my kid would do it...",
    ["MEDIUM"] = "Medium 🟠",
    ["MEDIUM_DESC"] = "Medium robbery, maybe not my kid but yeah... still not that hard",
    ["HARD"] = "Hard 🔴",
    ["HARD_DESC"] = "They call it hard but who knows? Maybe it's not hard at all?",
    ["START_THIS_ROBBERY"] = "Start this robbery ▶",

    ["HACK_SUCCESS"] = "SUCCESS",
    ["HACK_FAILED"] = "FAILED",
    ["HACK_RAN_OUT_OF_TIME"] = "RAN OUT OF TIME"
}

-- ⚠️DON'T TOUCH THIS⚠️
function L(id) if Language[id] then return Language[id] else return "MISSING LOCALE ("..id..")" end end

function L_HTML(id) if HTML_Language[id] then return HTML_Language[id] else return "MISSING LOCALE ("..id..")" end end

Last updated