Accessible files
Here you can find all the files which can be edite to make the asset compatible with your server.
config.lua
Config = {
Core = 'automatic', -- All core settings are in the 'core' folder.
TextUI = 'brutal_textui', -- false / 'brutal_textui' / 'ox_lib' / 'okokTextUI' / 'ESXTextUI' / 'QBDrawText' // Custom can be add in the cl_utils.lua!!!
Target = 'oxtarget', -- 'oxtarget' / 'qb-target' | set it to false if you use TextUI.
BrutalNotify = true, -- Buy here: (4€+VAT) https://store.brutalscripts.com | Or set up your own notify >> cl_utils.lua
BrutalGangs = true, -- Buy here: (35€+VAT) https://store.brutalscripts.com | Or set up your own if you're using a different gang script >> sv_utils.lua
SteamName = true, -- true = Steam name | false = character name
CopJobs = {'police', 'sheriff', 'fbi'}, -- Cop jobs
RequiredCopsCount = 0, -- This is how many cops are needed to be in the server to start a robbery
Cooldown = {global = false, time = 45}, -- The time between robberies | "global": global cooldown (if false, each bank has its own separate cooldown) | "time": in minutes
MinRobbersCount = 1, -- Minimum number of robbers required to start a robbery (cannot be higher than MaxRobbersCount)
MaxRobbersCount = 12, -- Maximum number of robbers allowed to participate in a robbery (maximum limit is 12)
MaxCurrentRobbery = 3, -- Max robberies at same time
RobberyEndCoolDown = 35, -- in minutes | This is the total time a robbery can last from start to automatic reset.
OverTime = 1, -- in minutes | The "final countdown" duration that robbers see on the UI. | This should always be less than RobberyEndCoolDown.
Blips = {
big_alert = {label = 'Bank Robbery', size = 1.0, sprite = 161, color = 1},
small_alert = {label = 'Bank Robbery', size = 0.5, sprite = 108, color = 1},
sell_ped = {use = true, label = 'Trader', size = 1.0, sprite = 272, color = 2},
},
Marker = {use = true, marker = 20, rgba = {233, 88, 69, 255}, bobUpAndDown = false, rotate = false},
OutlineSettings = {use = true, rgba = {255, 0, 0, 255}}, -- only usable with target option
Detonation = {label = "DETONATE", time = 10}, -- only used during loud robbery | "time": in second
DefaultMiniGames = {
HotWire = {
remainingTime = 30, -- Time limit (in seconds) to complete the minigame.
controls = {
Horizontal = {label = "Change horizontal", keys = {174, 175}},
Vertical = {label = "Change vertical", keys = {172, 173}},
Exit = {label = "Exit", key = 194},
},
},
FingerPrint = {
remainingTime = 200, -- Time limit (in seconds) to complete the minigame.
remainingHearths = 3,
controls = {
Horizontal = {label = "Change horizontal", keys = {174, 175}},
Vertical = {label = "Change vertical", keys = {172, 173}},
Confirm = {label = "Confirm", key = 191},
Exit = {label = "Exit", key = 194},
},
},
SafeCrack = {
defaultLocks = 3, -- default number of locks to solve in the safecrack minigame
controls = {
Rotate = {label = "Rotate", keys = {189, 190}},
Check = {label = "Check", key = 191},
Exit = {label = "Exit", key = 202},
},
},
},
InvitationKeys = {
-- controls list: https://docs.fivem.net/docs/game-references/controls/
accept = {
control = 246, -- Y or Z
label = 'Y'
},
decline = {
control = 249, -- N
label = 'N'
}
},
LockerChanceforReward = 50, -- in percentages
RobberyRequirements = {
bigbomb = {required = true, remove = true, item = 'bank_bigbomb'},
thermalbomb = {required = true, remove = true, item = 'bank_thermalbomb'},
hackingdevice = {required = true, remove = false, item = 'bank_hackingdevice'},
drill = {required = true, remove = false, item = 'bank_drill'},
bag = {required = false, item = 'bank_bag'},
},
RewardItems = {
gold = {item = 'bank_gold', count = {10, 20}, sellPrice = 150},
diamond = {item = 'bank_diamond', count = {10, 20}, sellPrice = 500},
cash = {count = {1000, 2000}, item = {use = false, name = 'money'}, blackmoney = {use = false, name = 'black_money'}},
},
SellItem = {
Use = true,
AvailableLimit = 10, -- in minutes
Locations = {
{model = 'a_m_m_socenlat_01', coords = vector4(1123.3041, -978.0587, 46.5031, 12.8621)},
{model = 'csb_grove_str_dlr', coords = vector4(1010.4541, -2289.2986, 30.5095, 180.3007)},
{model = 'a_m_y_soucent_02', coords = vector4(67.3545, -2569.6697, 6.0046, 93.3623)},
{model = 'a_m_y_stbla_02', coords = vector4(473.9825, -1775.2993, 28.6939, 269.0656)},
{model = 's_m_y_dealer_01', coords = vector4(-1004.8494, -1003.2255, 2.1503, 38.1959)},
{model = 'u_m_m_aldinapoli', coords = vector4(-570.2860, 311.1976, 84.4889, 359.8380)},
{model = 'a_m_y_soucent_02', coords = vector4(331.2457, 362.3709, 106.6578, 351.1996)},
{model = 's_m_y_dealer_01', coords = vector4(713.9666, -716.9224, 26.1299, 186.5579)},
{model = 'a_m_m_socenlat_01', coords = vector4(854.5257, -2112.8164, 31.5756, 185.1275)},
{model = 'u_m_m_aldinapoli', coords = vector4(-683.3369, -876.2120, 24.4991, 186.2827)},
{model = 'a_m_y_stbla_02', coords = vector4(-3169.2219, 1093.5312, 20.8580, 76.0917)},
{model = 's_m_y_dealer_01', coords = vector4(-1102.1595, 2721.7717, 18.8004, 314.5838)},
{model = 'a_m_y_soucent_02', coords = vector4(1436.1757, 3639.2427, 34.9466, 25.9137)},
},
},
PoliceDoorOpen = {
use = true,
opentime = 1, -- in minutes
command = 'bank_door',
control = '', -- Controls list: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
suggestion = 'Opens the bank door if you are a cop'
},
Banks = {
[1] = {
Tablet = {coords = vector3(144.509, -1042.416, 29.78), rotate = vector3(0.0, 90.0, -110.0), offset = {x = -0.3, y = 0.1, z = -0.4}},
HackableComputers = {
[1] = {model = 'prop_keyboard_01a', coords = vector3(146.7914, -1041.0859, 29.3679)},
[2] = {model = 'prop_keyboard_01a', coords = vector3(148.1644, -1041.6041, 29.3680)},
[3] = {model = 'prop_keyboard_01a', coords = vector3(149.6194, -1042.1493, 29.3680)},
[4] = {model = 'prop_keyboard_01a', coords = vector3(150.9377, -1042.6304, 29.3680)},
},
SecurityDoor = {model = 'k4mb1_genbank_door2', coords = vector4(144.379, -1043.3, 29.3679, 250.0)},
SmallSafe = {model = 'ch_prop_ch_arcade_safe_door', coords = vector4(145.151428, -1045.814956, 29.161142, 159.846176)},
KeyPad = {model = 'k4mb1_genbank_keypad', coords = vector3(146.9452, -1046.1952, 29.3681)},
SafeDoor = {model = 'k4mb1_genbank_framedoor', coords = vector4(147.720, -1045.3, 29.3765, 250.0)},
SlattedDoor = {model = 'v_ilev_gb_vaubar', coords = vector4(149.134, -1047.2, 29.3463, 159.0), offset = {x = 1.82, y = -0.95, z = -0.04}},
Stack = {
-- Chance defines the probability of getting each item in the stack.
-- Example: {gold = 3, cash = 7} means:
-- Gold: 30% chance
-- Cash: 70% chance
chance = {gold = 3, cash = 7}, coords = vector4(148.753, -1049.2, 29.2000, 160.0)
},
Trollys = {
-- Chance defines the probability of finding each item in the trolley.
-- The numbers are relative weights. For example:
-- {diamond = 1, gold = 3, cash = 6} means:
-- Diamond: 10% chance
-- Gold: 30% chance
-- Cash: 60% chance
{chance = {diamond = 1, gold = 3, cash = 6}, coords = vector4(149.926, -1045.0, 28.3463, 160.0)},
-- you can add more...
},
LockBoxs = {
{coords = vector4(146.7838592529297,-1050.369140625,28.3430004119873,159.84617614746095), model = 'ch_prop_ch_sec_cabinet_01d'},
{coords = vector4(146.76101684570313, -1048.133056640625, 28.34294509887695, 69.84616088867188), model = 'ch_prop_ch_sec_cabinet_01a'},
{coords = vector4(150.6094512939453, -1050.397216796875, 28.34300231933593, 249.84620666503907), model = 'ch_prop_ch_sec_cabinet_01a'},
{coords = vector4(148.66282653808595, -1051.0587158203126, 28.3429946899414, 159.84617614746095), model = 'ch_prop_ch_sec_cabinet_01g'},
}
},
[2] = {
Tablet = {coords = vector3(308.846, -280.756, 54.6), rotate = vector3(0.0, 90.0, -110.0), offset = {x = -0.3, y = 0.1, z = -0.4}},
HackableComputers = {
[1] = {model = 'prop_keyboard_01a', coords = vector3(311.1392, -279.4526, 54.1647)},
[2] = {model = 'prop_keyboard_01a', coords = vector3(312.5720, -279.9933, 54.1647)},
[3] = {model = 'prop_keyboard_01a', coords = vector3(313.9478, -280.5051, 54.1647)},
[4] = {model = 'prop_keyboard_01a', coords = vector3(315.2738, -280.9801, 54.1647)},
},
SecurityDoor = {model = 'k4mb1_genbank_door2', coords = vector4(308.803, -282.03, 54.1646, 250.0)},
SmallSafe = {model = 'ch_prop_ch_arcade_safe_door', coords = vector4(309.483337, -284.182235, 53.957855, 159.865952)},
KeyPad = {model = 'k4mb1_genbank_keypad', coords = vector3(311.3861, -284.5151, 54.1648)},
SafeDoor = {model = 'k4mb1_genbank_framedoor', coords = vector4(312.182, -283.67, 54.1730, 250.0)},
SlattedDoor = {model = 'v_ilev_gb_vaubar', coords = vector4(314.122, -285.52, 54.1429, 159.0), offset = {x = 1.82, y = -0.95, z = -0.04}},
Stack = {
-- Chance defines the probability of getting each item in the stack.
-- Example: {gold = 3, cash = 7} means:
-- Gold: 30% chance
-- Cash: 70% chance
chance = {gold = 3, cash = 7}, coords = vector4(313.156, -287.61, 54.0, 160.0)
},
Trollys = {
-- Chance defines the probability of finding each item in the trolley.
-- The numbers are relative weights. For example:
-- {diamond = 1, gold = 3, cash = 6} means:
-- Diamond: 10% chance
-- Gold: 30% chance
-- Cash: 60% chance
{chance = {diamond = 1, gold = 3, cash = 6}, coords = vector4(314.211, -283.37, 53.1430, 160.0)},
-- you can add more...
},
LockBoxs = {
{coords = vector4(311.117340, -288.735840, 53.139713, 159.865952), model = 'ch_prop_ch_sec_cabinet_01d'},
{coords = vector4(311.093689, -286.499786, 53.139656, 69.865936), model = 'ch_prop_ch_sec_cabinet_01a'},
{coords = vector4(314.942932, -288.762604, 53.139717, 249.865997), model = 'ch_prop_ch_sec_cabinet_01a'},
{coords = vector4(312.996521, -289.424774, 53.139709, 159.865952), model = 'ch_prop_ch_sec_cabinet_01g'},
}
},
[3] = {
Tablet = {coords = vector3(-356.298, -51.717, 49.425), rotate = vector3(0.0, 90.0, -110.0), offset = {x = -0.3, y = 0.1, z = -0.4}},
HackableComputers = {
[1] = {model = 'prop_keyboard_01a', coords = vector3(-354.0253, -50.3500, 49.0364)},
[2] = {model = 'prop_keyboard_01a', coords = vector3(-352.6164, -50.8082, 49.0364)},
[3] = {model = 'prop_keyboard_01a', coords = vector3(-351.1423, -51.3346, 49.0365)},
[4] = {model = 'prop_keyboard_01a', coords = vector3(-349.8858, -51.7900, 49.0365)},
},
SecurityDoor = {model = 'k4mb1_genbank_door2', coords = vector4(-356.48, -52.703, 49.0364, 250.0)},
SmallSafe = {model = 'ch_prop_ch_arcade_safe_door', coords = vector4(-355.585297, -55.074245, 48.829643, 160.859818)},
KeyPad = {model = 'k4mb1_genbank_keypad', coords = vector3(-353.6870, -55.4339, 49.0366)},
SafeDoor = {model = 'k4mb1_genbank_framedoor', coords = vector4(-353.02, -54.810, 49.0450, 250.0)},
SlattedDoor = {model = 'v_ilev_gb_vaubar', coords = vector4(-351.66, -56.329, 49.0148, 159.0), offset = {x = 1.82, y = -0.95, z = -0.04}},
Stack = {
-- Chance defines the probability of getting each item in the stack.
-- Example: {gold = 3, cash = 7} means:
-- Gold: 30% chance
-- Cash: 70% chance
chance = {gold = 3, cash = 7}, coords = vector4(-351.85, -58.389, 48.8548, 160.0)
},
Trollys = {
-- Chance defines the probability of finding each item in the trolley.
-- The numbers are relative weights. For example:
-- {diamond = 1, gold = 3, cash = 6} means:
-- Diamond: 10% chance
-- Gold: 30% chance
-- Cash: 60% chance
{chance = {diamond = 1, gold = 3, cash = 6}, coords = vector4(-350.87, -54.180, 48.0148, 160.0)},
-- you can add more...
},
LockBoxs = {
{coords = vector4(-353.872803, -59.598843, 48.011501, 160.859818), model = 'ch_prop_ch_sec_cabinet_01d'},
{coords = vector4(-353.935211, -57.363514, 48.011444, 70.859795), model = 'ch_prop_ch_sec_cabinet_01a'},
{coords = vector4(-350.047333, -59.559238, 48.011505, 250.859848), model = 'ch_prop_ch_sec_cabinet_01a'},
{coords = vector4(-351.981934, -60.255074, 48.011497, 160.859818), model = 'ch_prop_ch_sec_cabinet_01g'},
}
},
[4] = {
Tablet = {coords = vector3(-1215.073, -335.835, 38.217), rotate = vector3(0.0, 90.0, 297.0), offset = {x = -0.3, y = -0.15, z = -0.5}},
HackableComputers = {
[1] = {model = 'prop_keyboard_01a', coords = vector3(-1214.4938, -333.2347, 37.7809)},
[2] = {model = 'prop_keyboard_01a', coords = vector3(-1213.1909, -332.5580, 37.7809)},
[3] = {model = 'prop_keyboard_01a', coords = vector3(-1211.8444, -331.9097, 37.7809)},
[4] = {model = 'prop_keyboard_01a', coords = vector3(-1210.5729, -331.2396, 37.7809)},
},
SecurityDoor = {model = 'k4mb1_genbank_door2', coords = vector4(-1214.3, -336.60, 37.7809, 297.0)},
SmallSafe = {model = 'ch_prop_ch_arcade_safe_door', coords = vector4(-1212.148560, -337.647567, 37.574100, 206.863739)},
KeyPad = {model = 'k4mb1_genbank_keypad', coords = vector3(-1210.5978, -336.5136, 37.7811)},
SafeDoor = {model = 'k4mb1_genbank_framedoor', coords = vector4(-1210.6, -335.50, 37.7895, 297.0)},
SlattedDoor = {model = 'v_ilev_gb_vaubar', coords = vector4(-1208.2, -335.60, 37.7592, 207.0), offset = {x = 1.0, y = -0.85, z = -0.04}},
Stack = {
-- Chance defines the probability of getting each item in the stack.
-- Example: {gold = 3, cash = 7} means:
-- Gold: 30% chance
-- Cash: 70% chance
chance = {gold = 3, cash = 7}, coords = vector4(-1207.20, -337.22, 37.6092, 207.0)
},
Trollys = {
-- Chance defines the probability of finding each item in the trolley.
-- The numbers are relative weights. For example:
-- {diamond = 1, gold = 3, cash = 6} means:
-- Diamond: 10% chance
-- Gold: 30% chance
-- Cash: 60% chance
{chance = {diamond = 1, gold = 3, cash = 6}, coords = vector4(-1209.5, -333.62, 36.7592, 207.0)},
-- you can add more...
},
LockBoxs = {
{coords = vector4(-1207.714966, -339.563049, 36.755959, 206.863739), model = 'ch_prop_ch_sec_cabinet_01d'},
{coords = vector4(-1209.366455, -338.055237, 36.755905, 116.863708), model = 'ch_prop_ch_sec_cabinet_01a'},
{coords = vector4(-1205.086304, -336.783539, 36.755959, 296.863770), model = 'ch_prop_ch_sec_cabinet_01a'},
{coords = vector4(-1205.929565, -338.658600, 36.755955, 206.863739), model = 'ch_prop_ch_sec_cabinet_01g'},
}
},
[5] = {
Tablet = {coords = vector3(1179.516, 2710.263, 38.500), rotate = vector3(0.0, 90.0, 90.0), offset = {x = 0.3, y = 0.03, z = -0.4}},
HackableComputers = {
[1] = {model = 'prop_keyboard_01a', coords = vector3(1177.8151, 2708.2319, 38.0879)},
[2] = {model = 'prop_keyboard_01a', coords = vector3(1176.3805, 2708.2031, 38.0879)},
[3] = {model = 'prop_keyboard_01a', coords = vector3(1174.8105, 2708.2390, 38.0879)},
[4] = {model = 'prop_keyboard_01a', coords = vector3(1173.4064, 2708.2036, 38.0879)},
},
SecurityDoor = {model = 'k4mb1_genbank_door2', coords = vector4(1179.28, 2711.31, 38.0878, 90.0)},
SmallSafe = {model = 'ch_prop_ch_arcade_safe_door', coords = vector4(1177.736084, 2713.213271, 37.881099, 360.000000)},
KeyPad = {model = 'k4mb1_genbank_keypad', coords = vector3(1175.8223, 2712.9443, 38.0881)},
SafeDoor = {model = 'k4mb1_genbank_framedoor', coords = vector4(1175.63, 2712.23, 38.0880, 90.0)},
SlattedDoor = {model = 'v_ilev_gb_vaubar', coords = vector4(1173.48, 2713.31, 38.0662, 0.0), offset = {x = 1.45, y = 1.0, z = -0.04}},
Stack = {
-- Chance defines the probability of getting each item in the stack.
-- Example: {gold = 3, cash = 7} means:
-- Gold: 30% chance
-- Cash: 70% chance
chance = {gold = 3, cash = 7}, coords = vector4(1173.17, 2715.1, 37.91363, 0.0)
},
Trollys = {
-- Chance defines the probability of finding each item in the trolley.
-- The numbers are relative weights. For example:
-- {diamond = 1, gold = 3, cash = 6} means:
-- Diamond: 10% chance
-- Gold: 30% chance
-- Cash: 60% chance
{chance = {diamond = 1, gold = 3, cash = 6}, coords = vector4(1173.63, 2710.79, 37.0662, 0.0)},
-- you can add more...
},
LockBoxs = {
{coords = vector4(1174.639648, 2716.927002, 37.062958, 0.000000), model = 'ch_prop_ch_sec_cabinet_01d'},
{coords = vector4(1175.431519, 2714.835693, 37.062904, 270.000000), model = 'ch_prop_ch_sec_cabinet_01a'},
{coords = vector4(1171.038696, 2715.635498, 37.062958, 90.000015), model = 'ch_prop_ch_sec_cabinet_01a'},
{coords = vector4(1172.638184, 2716.927002, 37.062954, 0.000000), model = 'ch_prop_ch_sec_cabinet_01g'},
}
},
[6] = {
Tablet = {coords = vector3(-2959.334, 478.325, 16.1), rotate = vector3(0.0, 90.0, -2.0), offset = {x = 0.0, y = -0.3, z = -0.4}},
HackableComputers = {
[1] = {model = 'prop_keyboard_01a', coords = vector3(-2961.2690, 480.1206, 15.6969)},
[2] = {model = 'prop_keyboard_01a', coords = vector3(-2961.2136, 481.5522, 15.6970)},
[3] = {model = 'prop_keyboard_01a', coords = vector3(-2961.1602, 483.0985, 15.6970)},
[4] = {model = 'prop_keyboard_01a', coords = vector3(-2961.1035, 484.5002, 15.6970)},
},
SecurityDoor = {model = 'k4mb1_genbank_door2', coords = vector4(-2958.18, 477.94, 15.7, -2.0)},
SmallSafe = {model = 'ch_prop_ch_arcade_safe_door', coords = vector4(-2956.290, 479.976, 15.489, 267.542053)},
KeyPad = {model = 'k4mb1_genbank_keypad', coords = vector3(-2956.4929, 481.8984, 15.6971)},
SafeDoor = {model = 'k4mb1_genbank_framedoor', coords = vector4(-2956.66, 481.92, 15.7, -2.0)},
SlattedDoor = {model = 'v_ilev_gb_vaubar', coords = vector4(-2956.77, 484.27, 15.7, -92.0), offset = {x = 0.45, y = -0.04, z = -0.04}},
Stack = {
-- Chance defines the probability of getting each item in the stack.
-- Example: {gold = 3, cash = 7} means:
-- Gold: 30% chance
-- Cash: 70% chance
chance = {gold = 3, cash = 7}, coords = vector4(-2954.16, 484.5, 15.52, -90.0)
},
Trollys = {
-- Chance defines the probability of finding each item in the trolley.
-- The numbers are relative weights. For example:
-- {diamond = 1, gold = 3, cash = 6} means:
-- Diamond: 10% chance
-- Gold: 30% chance
-- Cash: 60% chance
{chance = {diamond = 1, gold = 3, cash = 6}, coords = vector4(-2958.5, 484.24, 14.7, -90.0)},
-- you can add more...
},
LockBoxs = {
{coords = vector4(-2952.439209, 482.911987, 14.672007, 267.542053), model = 'ch_prop_ch_sec_cabinet_01d'},
{coords = vector4(-2954.562500, 482.210510, 14.671951, 177.542023), model = 'ch_prop_ch_sec_cabinet_01a'},
{coords = vector4(-2953.575439, 486.565094, 14.672009, 357.542053), model = 'ch_prop_ch_sec_cabinet_01a'},
{coords = vector4(-2952.353516, 484.911652, 14.672001, 267.542053), model = 'ch_prop_ch_sec_cabinet_01g'},
}
},
},
-----------------------------------------------------------
-----------------------| TRANSLATE |-----------------------
-----------------------------------------------------------
NUILanguage = "en", -- "en", "es", "fr", "de", "pt", "it", "pl", "nl", "ru", "tr", "hu", "ro", "cs", "sv", "ar"
MoneyForm = '$', -- Money form
Locales = {
OverTimeTitle = "Robbery End",
OverTimeDescription = "Leave the robbery area quickly.",
SellTimerTitle = "Sell Loot",
SellTimerDescription = "Deliver your loot to the buyer before it's too late.",
Minutes = "minutes.",
SoldItems = "Sold Items"
},
Texts = {
[1] = {'[E] - Door Kick', 38, 'Door Kick', 'fa-solid fa-door-closed'},
[2] = {'[E] - Computer Hack', 38, 'Computer Hack', 'fa-solid fa-keyboard'},
[3] = {'[E] - Door Hack', 38, 'Door Hack', 'fa-solid fa-vault'},
[4] = {'[E] - Door Breach', 38, 'Door Breach', 'fa-solid fa-bomb'},
[5] = {'[E] - Safe Crack', 38, 'Safe Crack', 'fa-solid fa-vault'},
[6] = {'[E] - Grab Trolly', 38, 'Grab Trolly', 'fa-solid fa-hand'},
[7] = {'[E] - Plant Thermite', 38, 'Plant Thermite', 'fa-solid fa-bomb'},
[8] = {'[E] - Grab Stack', 38, 'Grab Stack', 'fa-solid fa-hand'},
[9] = {'[E] - Drill The Boxes', 38, 'Drill The Boxes', 'fa-solid fa-vault'},
[10] = {'[E] - Open Menu', 38, 'Open Menu', 'fa-solid fa-tablet'},
[11] = {'[E] - Sell the items', 38, 'Sell the items', 'fa-solid fa-user-secret'},
},
-- Notify function EDITABLE >> cl_utils.lua
Notify = {
[1] = {"Bank Robbery", "The hack was successful.", 5000, "success"},
[2] = {"Bank Robbery", "The hack failed.", 5000, "error"},
[3] = {"Bank Robbery", "Put the gun away!", 5000, 'error'},
[4] = {"Bank Robbery", "You don't have the required item:", 5000, 'error'},
[5] = {"Bank Robbery", "You got:", 5000, 'success'},
[6] = {"Bank Robbery", "Not enough cops in the City!", 5000, 'error'},
[7] = {"Bank Robbery", "This player is already in the list.", 5000, 'error'},
[8] = {"Bank Robbery", "Leave the robbery area! The door will close soon.", 8000, 'info'},
[9] = {"Bank Robbery", "There are not enough robbers to start.", 5000, 'error'},
[10] = {"Bank Robbery", "One or more robbers you added haven't confirmed yet.", 5000, 'error'},
[11] = {"Bank Robbery", "A robbery is currently taking place here. Please check back later.", 5000, 'error'},
[12] = {"Bank Robbery", "There are already the maximum number of robberies in progress. Try again later.", 5000, 'error'},
[13] = {"Bank Robbery", "Player is already in another robbery!", 5000, 'error'},
[14] = {"Bank Robbery", "You can't invite more players!", 5000, 'error'},
[15] = {"Bank Robbery", "The robbery time is over!", 5000, 'error'},
[16] = {"Bank Robbery", "You are already in a robbery! Finish it before starting another.", 5000, 'error'},
[17] = {"Bank Robbery", "Bank already robbed. Available again at:", 5000, 'error'},
[18] = {"Bank Robbery", "The robbery is nearing its end! You can no longer loot items.", 5000, 'error'},
[19] = {"Bank Robbery", "You can not do this in a vehicle!", 5000, 'error'},
[20] = {"Bank Robbery", "Sell the items in the designated place!", 10000, 'info'},
[21] = {"Bank Robbery", "Time's up! The Trader has left!", 5000, 'error'},
[22] = {"Bank Robbery", "You sold:", 5000, 'success'},
[23] = {"Bank Robbery", "You have nothing useful!", 5000, 'error'},
[24] = {"Bank Robbery", "You have accepted the invitation!", 5000, "success"},
[25] = {"Bank Robbery", "You have declined the invitation!", 5000, "error"},
[26] = {"Bank Robbery", "There are too many robbers.", 5000, 'error'},
[27] = {"Bank Robbery", "The robbery has started!", 5000, 'success'},
[28] = {"Bank Robbery", "You are too far from the bank door.", 5000, 'error'},
[29] = {"Bank Robbery", "Only police officers can use this.", 5000, 'error'},
[30] = {"Bank Robbery", "Bank door has opened!", 5000, 'info'},
[31] = {"Bank Robbery", "Bank door has closed!", 5000, 'info'},
[32] = {"Bank Robbery", "Bank door is already open!", 5000, 'error'},
[33] = {"Bank Robbery", "The menu is already being used by someone else.", 5000, 'error'},
},
Webhooks = {
DateFormat = '%d/%m/%Y - %X',
Locale = {
['robberyStarted'] = '⌛ Robbery started...',
['robberyFinished'] = '✅ Robbery finished.',
['robberySold'] = '💰 Sold loot.',
['HasStarted'] = 'started the robbery!',
['HasFinished'] = 'finished the robbery!',
['HasSoldLoot'] = 'has sold all loot items.',
['Identifier'] = 'Identifier',
['Time'] = 'Time ⏲️'
},
-- To change a webhook color you need to set the decimal value of a color, you can use this website to do that - https://www.mathsisfun.com/hexadecimal-decimal-colors.html
Colors = {
['robberyStarted'] = 16753920,
['robberyFinished'] = 3145631,
['robberySold'] = 3145631,
}
},
}client-utils.lua
ESX = Core
QBCore = Core
-- Buy here: (4€+VAT) https://store.brutalscripts.com
function notification(title, text, time, type)
if Config.BrutalNotify then
exports['brutal_notify']:SendAlert(title, text, time, type)
else
-- Put here your own notify and set the Config.BrutalNotify to false
-- Default ESX Notify:
--TriggerEvent('esx:showNotification', text)
-- Default QB Notify:
--TriggerEvent('QBCore:Notify', text, 'info', 5000)
-- OKOK Notify:
-- exports['okokNotify']:Alert('BANK ROBBERY', text, time, type, false)
end
end
function TextUIFunction(type, text)
if type == 'open' then
if Config.TextUI:lower() == 'ox_lib' then
lib.showTextUI(text)
elseif Config.TextUI:lower() == 'okoktextui' then
exports['okokTextUI']:Open(text, 'darkblue', 'right')
elseif Config.TextUI:lower() == 'esxtextui' then
ESX.TextUI(text)
elseif Config.TextUI:lower() == 'qbdrawtext' then
exports['qb-core']:DrawText(text,'left')
elseif Config.TextUI:lower() == 'brutal_textui' then
exports['brutal_textui']:Open(text, "blue")
end
elseif type == 'hide' then
if Config.TextUI:lower() == 'ox_lib' then
lib.hideTextUI()
elseif Config.TextUI:lower() == 'okoktextui' then
exports['okokTextUI']:Close()
elseif Config.TextUI:lower() == 'esxtextui' then
ESX.HideUI()
elseif Config.TextUI:lower() == 'qbdrawtext' then
exports['qb-core']:HideText()
elseif Config.TextUI:lower() == 'brutal_textui' then
exports['brutal_textui']:Close()
end
end
end
function NoCarryWeapon()
if GetSelectedPedWeapon(PlayerPedId()) == GetHashKey('WEAPON_UNARMED') then
return true
else
SendNotify(3)
return false
end
end
function PlayerDied()
if GetResourceState("brutal_ambulancejob") == "started" then
return exports.brutal_ambulancejob:IsDead()
elseif GetResourceState("wasabi_ambulance") == "started" then
return exports.wasabi_ambulance:isPlayerDead()
else
if IsEntityDead(PlayerPedId()) then
return true
else
return false
end
end
end
RegisterNetEvent('brutal_bank_robbery:client:PoliceAlert')
AddEventHandler('brutal_bank_robbery:client:PoliceAlert', function(type, index, coords)
if type == 'create' then
if GetResourceState("brutal_policejob") == "started" then
local streetLabel = GetStreetNameFromHashKey(GetStreetNameAtCoord(coords.x, coords.y, coords.z))
TriggerServerEvent('brutal_policejob:server:citizencall', 'create', 'Bank Robbery in progress', {coords.x, coords.y, coords.z}, streetLabel)
end
notification('Bank Robbery', 'A robbery is in progress at Bank #'..index..'. Location marked on your map!', 10000, 'info')
local BigAlert = AddBlipForCoord(coords.x, coords.y, coords.z)
SetBlipSprite(BigAlert, Config.Blips.big_alert.sprite)
SetBlipScale(BigAlert, Config.Blips.big_alert.size)
SetBlipColour(BigAlert, Config.Blips.big_alert.color)
local SmallAlert = AddBlipForCoord(coords.x, coords.y, coords.z)
SetBlipSprite(SmallAlert, Config.Blips.small_alert.sprite)
SetBlipScale(SmallAlert, Config.Blips.small_alert.size)
SetBlipColour(SmallAlert, Config.Blips.small_alert.color)
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName(Config.Blips.small_alert.label..' #'..index)
EndTextCommandSetBlipName(SmallAlert)
AlertBlips[index] = {
big = BigAlert,
small = SmallAlert
}
else
if AlertBlips[index] then
if AlertBlips[index].big then
RemoveBlip(AlertBlips[index].big)
end
if AlertBlips[index].small then
RemoveBlip(AlertBlips[index].small)
end
AlertBlips[index] = nil
end
end
end)
function DisableMinimap()
DisplayRadar(false)
-- Here you can add a trigger to hide your HUD system
end
function EnableMinimap()
DisplayRadar(true)
-- Here you can add a trigger to enable your HUD system
endserver-utils.lua
local YourWebhook = 'WEBHOOK-HERE' -- help: https://docs.brutalscripts.com/site/others/discord-webhook
function GetWebhook()
return YourWebhook
end
RegisterServerEvent('brutal_bank_robbery:server:PoliceAlert')
AddEventHandler('brutal_bank_robbery:server:PoliceAlert', function(type, index, coords)
local Players = GetPlayersFunction()
for i = 1, #Players do
for ii=1, #Config.CopJobs do
if GetPlayerJob(Players[i]) == Config.CopJobs[ii] then
TriggerClientEvent('brutal_bank_robbery:client:PoliceAlert', Players[i], type, index, coords)
end
end
end
end)
function GiveGangRewards(source, job)
if Config.BrutalGangs and GetResourceState("brutal_gangs") == "started" then
local gangname = exports["brutal_gangs"]:GetPlayerGangName(source)
if gangname then
exports['brutal_gangs']:AddGangReputation(gangname, 5000)
exports['brutal_gangs']:AddGangMoney(gangname, 5000)
end
end
endclient-core.lua
Core = nil
if GetResourceState("es_extended") == "started" then
local _esx_ = 'new' -- 'new' / 'old'
if _esx_ then
Core = exports['es_extended']:getSharedObject()
else
while Core == nil do
TriggerEvent('esx:getSharedObject', function(obj) Core = obj end)
Citizen.Wait(0)
end
end
LoadedEvent = 'esx:playerLoaded'
TSCB = Core.TriggerServerCallback
function GetPlayerJobDatas()
return Core.GetPlayerData().job
end
function GetPlayersFunction()
return Core.Game.GetPlayers()
end
function GetVehiclePropertiesFunction(vehicle)
return Core.Game.GetVehicleProperties(vehicle)
end
function SetVehiclePropertiesFunction(vehicle, properties)
return Core.Game.SetVehicleProperties(vehicle, properties)
end
function GetClosestVehicleFunction(coords, modelFilter)
return Core.Game.GetClosestVehicle(coords, modelFilter)
end
elseif GetResourceState("qb-core") == "started" or GetResourceState("qbx_core") == "started" then
Core = exports['qb-core']:GetCoreObject()
LoadedEvent = 'QBCore:Client:OnPlayerLoaded'
TSCB = Core.Functions.TriggerCallback
function GetPlayerJobDatas()
return Core.Functions.GetPlayerData().job
end
function GetPlayersFunction()
return Core.Functions.GetPlayers()
end
function GetVehiclePropertiesFunction(vehicle)
return Core.Functions.GetVehicleProperties(vehicle)
end
function SetVehiclePropertiesFunction(vehicle, properties)
return Core.Functions.SetVehicleProperties(vehicle, properties)
end
function GetClosestVehicleFunction(coords, modelFilter)
return Core.Functions.GetClosestVehicle(coords, modelFilter)
end
endserver-core.lua
Core = nil
if GetResourceState("es_extended") == "started" then
local _esx_ = 'new' -- 'new' / 'old'
if _esx_ == 'new' then
Core = exports['es_extended']:getSharedObject()
else
Core = nil
TriggerEvent('esx:getSharedObject', function(obj) Core = obj end)
while Core == nil do
Citizen.Wait(0)
end
end
RESCB = Core.RegisterServerCallback
GETPFI = Core.GetPlayerFromId
RUI = Core.RegisterUsableItem
function GetIdentifier(source)
local xPlayer = GETPFI(source)
while xPlayer == nil do
Citizen.Wait(1000)
xPlayer = GETPFI(source)
end
return xPlayer.identifier
end
function GetPlayerByIdentifier(identifier)
return Core.GetPlayerFromIdentifier(identifier)
end
function AddMoneyFunction(source, amount, type)
local xPlayer = GETPFI(source)
if type ~= nil then
xPlayer.addAccountMoney(type, amount)
else
xPlayer.addAccountMoney('money', amount)
end
end
function GetItemCount(source, item)
local xPlayer = GETPFI(source)
if _esx_ == 'new' then
if xPlayer.getInventoryItem(item) == nil then
print("^1PROBLEM!^7 The ^3" ..item.. "^7 item is not created.")
return 0
end
return xPlayer.getInventoryItem(item).count
else
if string.sub(item, 0, 6):lower() == 'weapon' then
local loadoutNum, weapon = xPlayer.getWeapon(item:upper())
if weapon then
return true
else
return false
end
else
return xPlayer.getInventoryItem(item).count
end
end
end
function RemoveItem(source, item, amount)
local xPlayer = GETPFI(source)
if _esx_ == 'new' then
xPlayer.removeInventoryItem(item, amount)
else
if string.sub(item, 0, 6):lower() == 'weapon' then
xPlayer.removeWeapon(item)
else
xPlayer.removeInventoryItem(item, amount)
end
end
end
function AddItem(source, item, count, info)
local xPlayer = GETPFI(source)
if _esx_ == 'new' then
xPlayer.addInventoryItem(item, count, info)
else
if string.sub(item, 0, 6):lower() == 'weapon' then
xPlayer.addWeapon(item, 90)
else
xPlayer.addInventoryItem(item, count)
end
end
end
function GetPlayerNameFunction(source)
local name
if Config.SteamName then
name = GetPlayerName(source) or 'No Data'
else
local xPlayer = GETPFI(source)
name = xPlayer.getName() or 'No Data'
end
return name
end
function GetPlayerJob(source)
local xPlayer = GETPFI(source)
if xPlayer ~= nil then
PlayerJob = xPlayer.job.name
else
PlayerJob = ''
end
return PlayerJob
end
function GetPlayersFunction()
return Core.GetPlayers()
end
function GetItemLabel(itemname)
return Core.GetItemLabel(itemname)
end
elseif GetResourceState("qb-core") == "started" or GetResourceState("qbx_core") == "started" then
Core = exports['qb-core']:GetCoreObject()
RESCB = Core.Functions.CreateCallback
GETPFI = Core.Functions.GetPlayer
RUI = Core.Functions.CreateUseableItem
function GetIdentifier(source)
local xPlayer = GETPFI(source)
while xPlayer == nil do
Citizen.Wait(1000)
xPlayer = GETPFI(source)
end
return xPlayer.PlayerData.citizenid
end
function GetPlayerByIdentifier(identifier)
return Core.Functions.GetPlayerByCitizenId(identifier)
end
function AddMoneyFunction(source, amount, type)
local xPlayer = GETPFI(source)
if type ~= nil then
xPlayer.Functions.AddMoney(type, amount)
else
xPlayer.Functions.AddMoney('cash', amount)
end
end
function GetItemCount(source, item)
local xPlayer = GETPFI(source)
local items = xPlayer.Functions.GetItemByName(item)
local item_count = 0
if items ~= nil then
item_count = items.amount
else
item_count = 0
end
return item_count
end
function RemoveItem(source, item, amount)
local xPlayer = GETPFI(source)
xPlayer.Functions.RemoveItem(item, amount)
end
function AddItem(source, item, count, info)
local xPlayer = GETPFI(source)
xPlayer.Functions.AddItem(item, count, nil, info)
end
function GetPlayerNameFunction(source)
local name
if Config.SteamName then
name = GetPlayerName(source)
else
local xPlayer = GETPFI(source)
name = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname
end
return name
end
function GetPlayerJob(source)
local xPlayer = GETPFI(source)
return xPlayer.PlayerData.job.name
end
function GetPlayerGang(source)
local xPlayer = GETPFI(source)
return xPlayer.PlayerData.gang.name
end
function GetPlayersFunction()
return Core.Functions.GetPlayers()
end
function GetItemLabel(itemname)
local item = Core.Shared.Items[itemname]
if item then
return item.label
else
print("^1PROBLEM!^7 The ^3" ..item.. "^7 item is not created.")
end
end
endLast updated
Was this helpful?
