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' // if the TextUI is set to false target will step its place. | The Target cannot be false.
ProgressBar = 'ox_lib', -- 'progressBars' / 'pogressBar' / 'mythic_progbar' / 'ox_lib' // Custom can be add in the cl_utils.lua!!!
BrutalNotify = true, -- Buy here: (4€+VAT) https://store.brutalscripts.com | Or set up your own notify >> cl_utils.lua
BrutalKeys = true, -- Buy here: (15€+VAT) https://store.brutalscripts.com | Or set up your own if you're using a different vehicle key >> client-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
PlayerIdentityDisplay = "discord", -- "none" = character name with no picture | "discord" = discord name and profile picture | "steam" = steam name and profile picture
CopJobs = {'police', 'sheriff', 'fbi'}, -- Cop jobs
RequiredCopsCount = 0, -- This is how many cops are needed to be in the server to start a heist
Cooldown = 45, -- The time between robberies. (in minutes)
RequiredPlayers = {
min = 2, -- Minimum players required to start the heist.
max = 8 -- Maximum players allowed to start the heist.
},
StartPoint = vector3(707.304077, -967.645569, 30.37602),
Blips = {
startblip = {use = true, label = 'Train Heist', size = 1.0, sprite = 795, color = 1},
location = {label = 'Zone', size = 0.8, sprite = 568, color = 47, radiusblip = {radius = 50.0, color = 0}},
guard = {use = true, label = 'Enemy', size = 0.5, sprite = 1, color = 0},
box = {use = true, size = 0.5, sprite = 568, color = 2},
intelhack = {label = 'Railway Control Tower', size = 0.8, sprite = 767, color = 3, radiusblip = {radius = 50.0, color = 0}},
bombzone = {label = 'Bomb Plant Zone', size = 0.8, sprite = 653, color = 1, radiusblip = {radius = 80.0, color = 0}},
bomb = {use = true, size = 0.5, sprite = 1, color = 1},
train = {use = true, size = 0.8, sprite = 795, color = 5},
big_alert = {size = 1.0, sprite = 161, color = 1},
small_alert = {label = 'Train Robbery', size = 0.5, sprite = 795, color = 1},
trainzone = {label = 'Train Robbery Zone', size = 0.8, sprite = 795, color = 40, radiusblip = {radius = 100.0, 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
DefaultMiniGame = {
remainingTime = 30, -- Time limit (in seconds) to complete the minigame.
controls = {
Horizontal = {label = "Select", keys = {174, 175}},
Vertical = {label = "Move", keys = {172, 173}},
Confirm = {label = "Confirm", key = 201},
Exit = {label = "Quit", key = 202},
},
},
HeistItemRequirements = {
bag = {required = false, item = 'train_bag'},
cutter = {required = false, item = 'train_cutter'},
},
LootChances = {
cash = {
chance = 40,
model = 'h4_prop_h4_cash_stack_01a'
},
gold = {
chance = 10,
model = 'h4_prop_h4_gold_stack_01a'
},
weed = {
chance = 25,
model = 'h4_prop_h4_weed_stack_01a'
},
coke = {
chance = 25,
model = 'h4_prop_h4_coke_stack_01a'
}
},
RewardItems = {
cash = {item = false, count = {1000, 2000}},
gold = {item = 'train_gold', count = {10, 20}, sellPrice = 150},
weed = {item = 'train_weed', count = {10, 20}, sellPrice = 500},
coke = {item = 'train_coke', count = {10, 20}, sellPrice = 500},
},
GasSettings = {
timeout = 1, -- delay between damage applications (seconds)
damage = 5 -- amount of damage to deal
},
GasMask = {
drawable = 175, -- gas mask drawable ID (component 1)
texture = 0
},
SellItem = {
Use = true,
AvailableLimit = 10, -- in minutes
Locations = {
{model = 'a_m_m_socenlat_01', coords = vector4(1247.2794, -349.6277, 69.2098, 359.0937)},
{model = 'csb_grove_str_dlr', coords = vector4(713.9440, -716.9745, 26.1284, 187.2431)},
{model = 'a_m_y_soucent_02', coords = vector4(659.8383, 263.6920, 102.7156, 245.5291)},
{model = 'a_m_y_stbla_02', coords = vector4(-297.1065, 303.8560, 90.7183, 6.0962)},
{model = 's_m_y_dealer_01', coords = vector4(-444.4843, 288.3656, 83.2293, 0.4235)},
{model = 'u_m_m_aldinapoli', coords = vector4(-538.0673, -44.3825, 42.6501, 336.5557)},
{model = 'a_m_y_soucent_02', coords = vector4(1705.0630, 3845.5530, 34.9316, 263.0338)},
{model = 's_m_y_dealer_01', coords = vector4(1865.5641, 3760.0134, 32.9984, 301.5822)},
{model = 'a_m_m_socenlat_01', coords = vector4(1619.3677, 3712.4905, 35.0122, 106.1937)},
{model = 'u_m_m_aldinapoli', coords = vector4(1361.8351, 3650.8013, 33.8263, 253.3179)},
{model = 'a_m_y_stbla_02', coords = vector4(905.7675, 3586.4617, 33.4232, 4.5537)},
{model = 's_m_y_dealer_01', coords = vector4(469.6562, 3552.2849, 33.2386, 170.1622)},
{model = 'a_m_y_soucent_02', coords = vector4(2531.3792, 4114.2500, 38.7566, 245.7183)},
},
},
Heists = {
["bridge"] = {
Preparations = {
[1] = {
Location = vector3(2129.0015, 4790.0303, 40.9915),
Guards = {
{model = 'csb_mweather', coords = vector4(2122.6404, 4782.0688, 40.9703, 309.2416), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(2126.8987, 4776.7412, 40.9703, 305.5225), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
{model = 'csb_mweather', coords = vector4(2130.4270, 4770.7261, 40.9703, 338.5098), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(2137.8213, 4773.1309, 40.9741, 35.9897), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
{model = 'csb_mweather', coords = vector4(2143.5886, 4779.4214, 40.9703, 45.4057), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(2139.7971, 4789.9272, 40.9703, 48.6179), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
},
Boxes = {
{coords = vector4(2118.7141, 4783.2744, 39.9940, 120.4609), type = 'bomb', item = 'train_bomb', model = 'prop_c4_final_green'},
{coords = vector4(2145.3027, 4774.4478, 40.0173, 207.7516), type = 'hardrive', item = 'train_hardrive', model = 'tr_prop_tr_carry_box_01a'},
{coords = vector4(2128.3127, 4769.3145, 39.9703, 123.5506), type = 'moneybag', item = 'false', amount = {500, 1500}, model = 'ch_prop_ch_moneybag_01a'},
{coords = vector4(2137.1599, 4768.9072, 40.0534, 200.8665), type = 'moneybag', item = 'false', amount = {500, 1500}, model = 'ch_prop_ch_moneybag_01a'},
},
},
[2] = {
Location = vector3(1731.5267, 3310.9089, 41.2235),
Guards = {
{model = 'csb_mweather', coords = vector4(1726.1635, 3294.3464, 41.2235, 285.0655), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(1721.7025, 3304.6895, 41.2235, 281.6930), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
{model = 'csb_mweather', coords = vector4(1718.9696, 3315.7917, 41.2235, 282.3250), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(1740.4760, 3321.5305, 41.2235, 101.2765), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
{model = 'csb_mweather', coords = vector4(1742.9813, 3312.3359, 41.2235, 104.9130), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(1745.1475, 3302.8254, 41.2235, 98.6695), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
{model = 'csb_mweather', coords = vector4(1730.3207, 3325.9863, 41.2235, 198.7548), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(1721.9795, 3320.0713, 41.2235, 195.2746), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
},
Boxes = {
{coords = vector4(1722.4248, 3293.2676, 40.2235, 198.2820), type = 'bomb', item = 'train_bomb', model = 'prop_c4_final_green'},
{coords = vector4(1717.0271, 3312.6875, 40.2235, 106.8903), type = 'hardrive', item = 'train_hardrive', model = 'tr_prop_tr_carry_box_01a'},
{coords = vector4(1740.1483, 3328.9346, 40.2235, 286.8617), type = 'moneybag', item = 'false', amount = {500, 1500}, model = 'ch_prop_ch_moneybag_01a'},
{coords = vector4(1748.0651, 3300.2466, 40.2235, 284.5108), type = 'moneybag', item = 'false', amount = {500, 1500}, model = 'ch_prop_ch_moneybag_01a'},
{coords = vector4(1732.6591, 3329.2673, 40.2235, 19.8484), type = 'moneybag', item = 'false', amount = {500, 1500}, model = 'ch_prop_ch_moneybag_01a'},
{coords = vector4(1715.8104, 3325.1453, 40.2235, 23.8564), type = 'moneybag', item = 'false', amount = {500, 1500}, model = 'ch_prop_ch_moneybag_01a'},
},
},
[3] = {
Location = vector3(2350.1655, 3134.6350, 48.2087),
Guards = {
{model = 'csb_mweather', coords = vector4(2342.3938, 3142.5447, 48.2087, 169.7034), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(2348.0337, 3138.8513, 48.2087, 85.4403), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
{model = 'csb_mweather', coords = vector4(2357.9268, 3137.6233, 48.2087, 177.8912), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(2359.8203, 3126.5769, 48.2087, 44.2515), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
{model = 'csb_mweather', coords = vector4(2349.5674, 3128.8757, 48.2087, 50.8631), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(2340.5811, 3132.5957, 48.2087, 355.9480), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
},
Boxes = {
{coords = vector4(2337.6499, 3123.4609, 47.2087, 83.8837), type = 'bomb', item = 'train_bomb', model = 'prop_c4_final_green'},
{coords = vector4(2359.6799, 3119.8875, 47.2087, 261.6295), type = 'hardrive', item = 'train_hardrive', model = 'tr_prop_tr_carry_box_01a'},
{coords = vector4(2356.2417, 3143.5625, 47.2087, 351.3960), type = 'moneybag', item = 'false', amount = {500, 1500}, model = 'ch_prop_ch_moneybag_01a'},
{coords = vector4(2351.5308, 3144.2468, 47.2087, 355.3236), type = 'moneybag', item = 'false', amount = {500, 1500}, model = 'ch_prop_ch_moneybag_01a'},
},
}
},
IntelHack = {coords = vector3(2634.3740, 2932.0898, 44.7390), model = 'prop_monitor_03b'},
BombZone = {
Location = vector3(-515.5876, 4425.8540, 89.0503),
BombPlaces = {
{coords = vector3(-516.245, 4435.432, 88.05), rotation = vector3(-88.688, 0, 0)},
{coords = vector3(-517.361, 4435.267, 88.05), rotation = vector3(-88.688, 0, 0)},
{coords = vector3(-516.048, 4433.911, 88.05), rotation = vector3(-88.688, 0, 0)},
{coords = vector3(-517.161, 4433.784, 88.05), rotation = vector3(-88.688, 0, 0)},
{coords = vector3(-515.876, 4432.431, 88.05), rotation = vector3(-88.688, 0, 0)},
{coords = vector3(-516.912, 4432.309, 88.05), rotation = vector3(-88.688, 0, 0)},
{coords = vector3(-515.660, 4430.959, 88.076), rotation = vector3(-88.688, 0, 0)},
{coords = vector3(-516.719, 4430.806, 88.076), rotation = vector3(-88.688, 0, 0)},
{coords = vector3(-515.424, 4429.501, 88.076), rotation = vector3(-88.688, 0, 0)},
{coords = vector3(-516.539, 4429.337, 88.076), rotation = vector3(-88.688, 0, 0)},
},
SmokePlaces = {
{coords = vector3(-509.9972, 4377.7729, 89.0259)},
{coords = vector3(-511.1148, 4393.3340, 89.0506)},
{coords = vector3(-512.7263, 4404.0317, 89.0470)},
{coords = vector3(-514.5106, 4421.2886, 89.0441)},
{coords = vector3(-516.4875, 4433.5581, 89.0510)},
{coords = vector3(-520.7230, 4462.7349, 89.0484)},
{coords = vector3(-523.3897, 4478.9053, 89.0373)},
{coords = vector3(-524.8683, 4495.7500, 89.0467)},
{coords = vector3(-501.4372, 4443.3901, 31.2503)},
{coords = vector3(-504.4868, 4349.7251, 89.0399)},
{coords = vector3(-504.4868, 4349.7251, 89.0399)},
{coords = vector3(-500.5934, 4319.2661, 89.0461)},
{coords = vector3(-519.1924, 4367.0928, 67.5693)},
},
},
TrainSpawn = vector3(-367.4225, 5903.9741, 46.5291),
RandomContainerCount = {min = 3, max = 8}, -- How many containers will be randomly selected.
Containers = {
{coords = vector3(-510.579, 4389.936, 88.052), rotation = vector3(0.000, 0.000, 8.204)},
{coords = vector3(-508.663, 4375.843, 88.052), rotation = vector3(0.000, 0.000, 8.204)},
{coords = vector3(-507.268, 4366.505, 88.051), rotation = vector3(0.000, 0.000, -170.926)},
{coords = vector3(-506.737, 4361.888, 88.048), rotation = vector3(0.000, 0.000, 8.510)},
{coords = vector3(-505.394, 4352.630, 88.052), rotation = vector3(0.000, 0.000, -171.167)},
{coords = vector3(-504.660, 4347.548, 88.051), rotation = vector3(0.000, 0.000, 7.316)},
{coords = vector3(-503.430, 4338.175, 88.043), rotation = vector3(0.000, 0.000, -173.086)},
{coords = vector3(-502.771, 4333.455, 88.052), rotation = vector3(0.000, 0.000, 7.848)},
{coords = vector3(-501.526, 4324.538, 88.046), rotation = vector3(0.000, 0.000, -171.304)},
{coords = vector3(-521.128, 4368.152, 66.518), rotation = vector3(0.000, 0.000, 57.312)},
},
},
["factory"] = {
Preparations = {
[1] = {
Location = vector3(2129.0015, 4790.0303, 40.9915),
Guards = {
{model = 'csb_mweather', coords = vector4(2122.6404, 4782.0688, 40.9703, 309.2416), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(2126.8987, 4776.7412, 40.9703, 305.5225), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
{model = 'csb_mweather', coords = vector4(2130.4270, 4770.7261, 40.9703, 338.5098), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(2137.8213, 4773.1309, 40.9741, 35.9897), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
{model = 'csb_mweather', coords = vector4(2143.5886, 4779.4214, 40.9703, 45.4057), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(2139.7971, 4789.9272, 40.9703, 48.6179), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
},
Boxes = {
{coords = vector4(2118.7141, 4783.2744, 39.9940, 120.4609), type = 'bomb', item = 'train_bomb', model = 'prop_c4_final_green'},
{coords = vector4(2145.3027, 4774.4478, 40.0173, 207.7516), type = 'hardrive', item = 'train_hardrive', model = 'tr_prop_tr_carry_box_01a'},
{coords = vector4(2128.3127, 4769.3145, 39.9703, 123.5506), type = 'gasmask', item = 'train_gasmask', model = 'prop_player_gasmask'},
{coords = vector4(2137.1599, 4768.9072, 40.0534, 200.8665), type = 'moneybag', item = 'false', amount = {500, 1500}, model = 'ch_prop_ch_moneybag_01a'},
},
},
[2] = {
Location = vector3(1731.5267, 3310.9089, 41.2235),
Guards = {
{model = 'csb_mweather', coords = vector4(1726.1635, 3294.3464, 41.2235, 285.0655), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(1721.7025, 3304.6895, 41.2235, 281.6930), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
{model = 'csb_mweather', coords = vector4(1718.9696, 3315.7917, 41.2235, 282.3250), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(1740.4760, 3321.5305, 41.2235, 101.2765), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
{model = 'csb_mweather', coords = vector4(1742.9813, 3312.3359, 41.2235, 104.9130), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(1745.1475, 3302.8254, 41.2235, 98.6695), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
{model = 'csb_mweather', coords = vector4(1730.3207, 3325.9863, 41.2235, 198.7548), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(1721.9795, 3320.0713, 41.2235, 195.2746), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
},
Boxes = {
{coords = vector4(1722.4248, 3293.2676, 40.2235, 198.2820), type = 'bomb', item = 'train_bomb', model = 'prop_c4_final_green'},
{coords = vector4(1717.0271, 3312.6875, 40.2235, 106.8903), type = 'hardrive', item = 'train_hardrive', model = 'tr_prop_tr_carry_box_01a'},
{coords = vector4(1740.1483, 3328.9346, 40.2235, 286.8617), type = 'gasmask', item = 'train_gasmask', model = 'prop_player_gasmask'},
{coords = vector4(1748.0651, 3300.2466, 40.2235, 284.5108), type = 'moneybag', item = 'false', amount = {500, 1500}, model = 'ch_prop_ch_moneybag_01a'},
{coords = vector4(1732.6591, 3329.2673, 40.2235, 19.8484), type = 'moneybag', item = 'false', amount = {500, 1500}, model = 'ch_prop_ch_moneybag_01a'},
{coords = vector4(1715.8104, 3325.1453, 40.2235, 23.8564), type = 'moneybag', item = 'false', amount = {500, 1500}, model = 'ch_prop_ch_moneybag_01a'},
},
},
[3] = {
Location = vector3(2350.1655, 3134.6350, 48.2087),
Guards = {
{model = 'csb_mweather', coords = vector4(2342.3938, 3142.5447, 48.2087, 169.7034), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(2348.0337, 3138.8513, 48.2087, 85.4403), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
{model = 'csb_mweather', coords = vector4(2357.9268, 3137.6233, 48.2087, 177.8912), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(2359.8203, 3126.5769, 48.2087, 44.2515), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
{model = 'csb_mweather', coords = vector4(2349.5674, 3128.8757, 48.2087, 50.8631), weapon = 'WEAPON_ASSAULTRIFLE', armour = 50},
{model = 'csb_mweather', coords = vector4(2340.5811, 3132.5957, 48.2087, 355.9480), weapon = 'WEAPON_ASSAULTRIFLE', armour = 0},
},
Boxes = {
{coords = vector4(2337.6499, 3123.4609, 47.2087, 83.8837), type = 'bomb', item = 'train_bomb', model = 'prop_c4_final_green'},
{coords = vector4(2359.6799, 3119.8875, 47.2087, 261.6295), type = 'hardrive', item = 'train_hardrive', model = 'tr_prop_tr_carry_box_01a'},
{coords = vector4(2356.2417, 3143.5625, 47.2087, 351.3960), type = 'gasmask', item = 'train_gasmask', model = 'prop_player_gasmask'},
{coords = vector4(2351.5308, 3144.2468, 47.2087, 355.3236), type = 'moneybag', item = 'false', amount = {500, 1500}, model = 'ch_prop_ch_moneybag_01a'},
},
}
},
IntelHack = { coords = vector3(2634.3740, 2932.0898, 44.7390), model = 'prop_monitor_03b'},
BombZone = {
Location = vector3(2610.7947, 1421.9760, 33.5828),
BombPlaces = {
{coords = vector3(2610.334, 1417.522, 32.790), rotation = vector3(-92.500, 0, 0)},
{coords = vector3(2611.391, 1417.526, 32.790), rotation = vector3(-92.500, 0, 0)},
{coords = vector3(2611.391, 1419.011, 32.731), rotation = vector3(-92.500, 0, 0)},
{coords = vector3(2610.270, 1419.011, 32.725), rotation = vector3(-92.500, 0, 0)},
{coords = vector3(2610.285, 1420.497, 32.654), rotation = vector3(-92.500, 0, 0)},
{coords = vector3(2611.399, 1420.525, 32.654), rotation = vector3(-92.500, 0, 0)},
{coords = vector3(2611.399, 1422.012, 32.610), rotation = vector3(-92.500, 0, 0)},
{coords = vector3(2610.277, 1422.012, 32.610), rotation = vector3(-92.500, 0, 0)},
{coords = vector3(2610.277, 1423.509, 32.534), rotation = vector3(-92.500, 0, 0)},
{coords = vector3(2611.369, 1423.509, 32.540), rotation = vector3(-92.500, 0, 0)},
{coords = vector3(2611.369, 1425.020, 32.488), rotation = vector3(-92.500, 0, 0)},
{coords = vector3(2610.270, 1425.004, 32.488), rotation = vector3(-92.500, 0, 0)},
{coords = vector3(2610.270, 1426.491, 32.417), rotation = vector3(-92.500, 0, 0)},
{coords = vector3(2611.375, 1426.520, 32.417), rotation = vector3(-92.500, 0, 0)},
},
SmokePlaces = {
{coords = vector3(2628.0559, 1369.4382, 29.8908)},
{coords = vector3(2616.4060, 1369.6525, 35.5726)},
{coords = vector3(2612.3450, 1390.2726, 34.9352)},
{coords = vector3(2613.9192, 1414.8784, 33.9219)},
{coords = vector3(2612.1492, 1441.8430, 32.7717)},
{coords = vector3(2608.9656, 1453.8784, 32.2764)},
{coords = vector3(2610.2146, 1472.0502, 31.7424)},
{coords = vector3(2617.8430, 1485.2742, 29.5733)},
{coords = vector3(2630.5115, 1497.5740, 27.0689)},
{coords = vector3(2615.0764, 1508.8282, 30.5790)},
{coords = vector3(2621.5500, 1520.6754, 27.8634)},
{coords = vector3(2613.2007, 1529.7878, 29.8665)},
{coords = vector3(2619.6633, 1544.1962, 28.7293)},
{coords = vector3(2613.9958, 1560.1709, 29.1056)},
{coords = vector3(2611.9482, 1575.3296, 28.9858)},
{coords = vector3(2617.3188, 1588.5549, 28.5594)},
{coords = vector3(2614.4478, 1606.4155, 28.1906)},
{coords = vector3(2610.9866, 1619.5558, 28.1523)},
{coords = vector3(2614.1160, 1656.3911, 27.6038)},
{coords = vector3(2609.5598, 1672.5216, 27.1769)},
},
},
TrainSpawn = vector3(2486.4639, 2346.0813, 36.0569),
GasPlaces = {
{coords = vector3(2616.7905, 1473.6765, 30.2613)},
{coords = vector3(2618.5535, 1539.7538, 29.5740)},
{coords = vector3(2610.8108, 1665.6879, 27.3421)},
{coords = vector3(2633.6008, 1504.5378, 26.6806)},
{coords = vector3(2617.9231, 1385.7976, 34.5705)},
},
RandomContainerCount = {min = 5, max = 10}, -- How many containers will be randomly selected.
Containers = {
{coords = vector3(2609.704, 1607.990, 28.648), rotation = vector3(0.000, 0.000, 49.163)},
{coords = vector3(2616.063, 1602.474, 28.648), rotation = vector3(0.000, 0.000, -130.801)},
{coords = vector3(2609.930, 1578.752, 29.677), rotation = vector3(0.000, 0.000, 4.141)},
{coords = vector3(2610.511, 1570.413, 29.677), rotation = vector3(0.000, 0.000, -176.114)},
{coords = vector3(2611.779, 1533.934, 30.699), rotation = vector3(0.000, 0.000, -4.521)},
{coords = vector3(2611.084, 1525.470, 30.699), rotation = vector3(0.000, 0.000, 175.164)},
{coords = vector3(2614.089, 1512.160, 31.286), rotation = vector3(0.000, 0.000, -15.543)},
{coords = vector3(2611.824, 1503.972, 31.286), rotation = vector3(0.000, 0.000, 164.421)},
{coords = vector3(2607.922, 1458.935, 32.744), rotation = vector3(0.000, 0.000, 32.821)},
{coords = vector3(2612.504, 1451.858, 32.744), rotation = vector3(0.000, 0.000, -147.890)},
},
},
},
-----------------------------------------------------------
-----------------------| TRANSLATE |-----------------------
-----------------------------------------------------------
NUILanguage = "en", -- "en", "es", "fr", "de", "pt", "it", "pl", "nl", "ru", "tr", "hu", "ro", "cs", "sv", "ar"
MoneyForm = '$', -- Money form
Locales = {
SellTimerTitle = "Sell Loot",
SellTimerDescription = "Deliver your loot to the buyer before it's too late.",
Minutes = 'minutes.',
SoldItems = "Sold Items",
Success = "SUCCESS",
Fail = "FAIL"
},
Progressbar = {
Checking = {'Checking the body...', 4000}, -- text, time
},
Texts = {
[1] = {'[E] - Open Menu', 38, 'Open Menu', 'fa-solid fa-laptop'},
[2] = {'[E] - Check the body', 38, 'Check the body', 'fa-solid fa-magnifying-glass'},
[3] = {'[E] - Open the crate', 38, 'Open the crate', 'fa-solid fa-box'},
[4] = {'[E] - Hack the hard drive', 38, 'Hack the hard drive', 'fa-solid fa-hard-drive'},
[5] = {'[E] - Plant the bomb', 38, 'Plant the bomb', 'fa-solid fa-bomb'},
[6] = {'[E] - Open Container', 38, 'Open Container', 'fa-solid fa-door-open'},
[7] = {'[E] - Grab Stack', 38, 'Grab Stack', 'fa-solid fa-hand'},
[8] = {'[E] - Sell the items', 38, 'Sell the items', 'fa-solid fa-user-secret'},
},
-- Notify function EDITABLE >> cl_utils.lua
Notify = {
[1] = {"Train Heist", "The heist has started!", 5000, 'success'},
[2] = {"Train Heist", "Take down all guards", 5000, "info"},
[3] = {"Train Heist", "Put the gun away!", 5000, 'error'},
[4] = {"Train Heist", "You can not do this in a vehicle!", 5000, 'error'},
[5] = {"Train Heist", "You didn't find anything during the search.", 5000, 'error'},
[6] = {"Train Heist", "You found the opening code for the crates.", 5000, 'success'},
[7] = {"Train Heist", "All crates are now unlocked and can be opened.", 5000, "info"},
[8] = {"Train Heist", "All guards have been eliminated! Search their bodies to find the code for opening the crates.", 10000, "info"},
[9] = {"Train Heist", "You got:", 5000, 'success'},
[10] = {"Train Heist", "Go to the Railway Control Tower and extract the data from the hard drive to obtain information about the target train.", 15000, "info"},
[11] = {"Train Heist", "Go to the bomb plant zone and place the charges at the marked locations.", 10000, "info"},
[12] = {"Train Heist", "You have successfully obtained the information.", 5000, 'success'},
[13] = {"Train Heist", "You failed to obtain the information.", 5000, 'error'},
[14] = {"Train Heist", "You don't have the required item:", 5000, 'error'},
[15] = {"Train Heist", "All bombs are in place. The train is entering the area. Get ready.", 5000, "info"},
[16] = {"Train Heist", "Not enough cops in the City!", 5000, 'error'},
[17] = {"Train Heist", "The heist has already started. Please try again later.", 5000, 'error'},
[18] = {"Train Heist", "Not enough team player to start the heist.", 5000, 'error'},
[19] = {"Train Heist", "Too many team players to start the heist", 5000, 'error'},
[20] = {"Train Heist", "You have been removed from the heist by the leader.", 5000, 'error'},
[21] = {"Train Heist", "Train already robbed. Available again at:", 5000, 'error'},
[22] = {"Train Heist", "Sell the items in the designated place!", 10000, 'info'},
[23] = {"Train Heist", "You sold:", 5000, 'success'},
[24] = {"Train Heist", "You have nothing useful!", 5000, 'error'},
[25] = {"Train Heist", "You have looted everything. Leave the train area to receive your selling location.", 10000, 'info'},
[26] = {"Train Heist", "You have left the area. Waiting for the rest of your team.", 7000, 'success'},
[27] = {"Train Heist", "Time's up! The Trader has left!", 5000, 'error'},
},
Webhooks = {
DateFormat = '%d/%m/%Y - %X',
Locale = {
['heistProcess'] = '⌛ Heist started...',
['heistFinished'] = '✅ Heist finished.',
['heistSold'] = '💰 Sold loot.',
['HasStarted'] = 'started the Train Heist!',
['HasFinished'] = 'finished the Train Heist!',
['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 = {
['heistProcess'] = 3145631,
['heistFinished'] = 16711680
}
},
}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
SetNotificationTextEntry("STRING")
AddTextComponentString(text)
DrawNotification(0,1)
-- Default ESX Notify:
--TriggerEvent('esx:showNotification', text)
-- Default QB Notify:
--TriggerEvent('QBCore:Notify', text, 'info', 5000)
-- OKOK Notify:
-- exports['okokNotify']:Alert(title, 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 ProgressBarFunction(time, text)
if Config.ProgressBar:lower() == 'progressbars' then --LINK: https://github.com/EthanPeacock/progressBars/releases/tag/1.0
exports['progressBars']:startUI(time, text)
Citizen.Wait(time)
elseif Config.ProgressBar:lower() == 'pogressbar' then -- LINK: https://github.com/SWRP-PUBLIC/pogressBar
exports['pogressBar']:drawBar(time, text)
Citizen.Wait(time)
elseif Config.ProgressBar:lower() == 'ox_lib' then
lib.progressBar({
duration = time,
label = text,
useWhileDead = false,
canCancel = true,
})
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_train_heist:client:PoliceAlert')
AddEventHandler('brutal_train_heist: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', 'Train Heist in progress', {coords.x, coords.y, coords.z}, streetLabel)
end
notification('Train Heist', 'A heist is in progress at #'..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)
EndTextCommandSetBlipName(SmallAlert)
AlertBlips = {
big = BigAlert,
small = SmallAlert
}
else
if DoesBlipExist(AlertBlips.big) then
RemoveBlip(AlertBlips.big)
end
if DoesBlipExist(AlertBlips.small) then
RemoveBlip(AlertBlips.small)
end
AlertBlips = {}
end
end)
function NoCarryWeapon()
if GetSelectedPedWeapon(PlayerPedId()) == GetHashKey('WEAPON_UNARMED') then
return true
else
SendNotify(3)
return false
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_train_heist:server:PoliceAlert')
AddEventHandler('brutal_train_heist: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_train_heist: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 == 'sell' then
xPlayer.addAccountMoney('money', 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.PlayerIdentityDisplay:lower() == "steam" then
name = GetPlayerName(source) or 'No Data'
elseif Config.PlayerIdentityDisplay:lower() == "discord" then
name = GetDiscordName(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 == 'sell' then
xPlayer.Functions.AddMoney('cash', 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.PlayerIdentityDisplay:lower() == "steam" then
name = GetPlayerName(source) or 'No Data'
elseif Config.PlayerIdentityDisplay:lower() == "discord" then
name = GetDiscordName(source) or 'No Data'
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
