├── .gitignore ├── README.md ├── client └── main.lua ├── config.lua ├── fxmanifest.lua ├── locales ├── br.lua ├── de.lua ├── en.lua ├── fi.lua ├── fr.lua ├── pl.lua └── sv.lua └── server └── main.lua /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Lua sources 2 | luac.out 3 | 4 | # luarocks build files 5 | *.src.rock 6 | *.zip 7 | *.tar.gz 8 | 9 | # Object files 10 | *.o 11 | *.os 12 | *.ko 13 | *.obj 14 | *.elf 15 | 16 | # Precompiled Headers 17 | *.gch 18 | *.pch 19 | 20 | # Libraries 21 | *.lib 22 | *.a 23 | *.la 24 | *.lo 25 | *.def 26 | *.exp 27 | 28 | # Shared objects (inc. Windows DLLs) 29 | *.dll 30 | *.so 31 | *.so.* 32 | *.dylib 33 | 34 | # Executables 35 | *.exe 36 | *.out 37 | *.app 38 | *.i*86 39 | *.x86_64 40 | *.hex 41 | 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # esx_hacking 2 | This script allows as a robbery, to be able to hack buildings and thus to earn money. A simple and funny script. 3 | 4 | I created this script with the base of the script "holdup". 5 | I modified several parts and here is the result. 6 | 7 | Now you can hack the FIB and make money. 8 | Of course, you are free to modify this script. 9 | 10 | 11 | -------- Installation -------- 12 | 13 | - Add this in your "server.cfg" : start esx_hacking 14 | -------------------------------------------------------------------------------- /client/main.lua: -------------------------------------------------------------------------------- 1 | local holdingUp = false 2 | local store = "" 3 | local blipRobbery = nil 4 | ESX = nil 5 | 6 | Citizen.CreateThread(function() 7 | while ESX == nil do 8 | TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) 9 | Citizen.Wait(0) 10 | end 11 | end) 12 | 13 | function drawTxt(x,y, width, height, scale, text, r,g,b,a, outline) 14 | SetTextFont(0) 15 | SetTextProportional(0) 16 | SetTextScale(scale, scale) 17 | SetTextColour(r, g, b, a) 18 | SetTextDropShadow(0, 0, 0, 0,255) 19 | SetTextEdge(1, 0, 0, 0, 255) 20 | SetTextDropShadow() 21 | if outline then SetTextOutline() end 22 | 23 | BeginTextCommandDisplayText('STRING') 24 | AddTextComponentSubstringPlayerName(text) 25 | EndTextCommandDisplayText(x - width/2, y - height/2 + 0.005) 26 | end 27 | 28 | RegisterNetEvent('esx_hacking:currentlyRobbing') 29 | AddEventHandler('esx_hacking:currentlyRobbing', function(currentStore) 30 | holdingUp, store = true, currentStore 31 | end) 32 | 33 | RegisterNetEvent('esx_hacking:killBlip') 34 | AddEventHandler('esx_hacking:killBlip', function() 35 | RemoveBlip(blipRobbery) 36 | end) 37 | 38 | RegisterNetEvent('esx_hacking:setBlip') 39 | AddEventHandler('esx_hacking:setBlip', function(position) 40 | blipRobbery = AddBlipForCoord(position.x, position.y, position.z) 41 | 42 | SetBlipSprite(blipRobbery, 161) 43 | SetBlipScale(blipRobbery, 2.0) 44 | SetBlipColour(blipRobbery, 3) 45 | 46 | PulseBlip(blipRobbery) 47 | end) 48 | 49 | RegisterNetEvent('esx_hacking:tooFar') 50 | AddEventHandler('esx_hacking:tooFar', function() 51 | holdingUp, store = false, '' 52 | ESX.ShowNotification(_U('robbery_cancelled')) 53 | end) 54 | 55 | RegisterNetEvent('esx_hacking:robberyComplete') 56 | AddEventHandler('esx_hacking:robberyComplete', function(award) 57 | holdingUp, store = false, '' 58 | ESX.ShowNotification(_U('robbery_complete', award)) 59 | end) 60 | 61 | RegisterNetEvent('esx_hacking:startTimer') 62 | AddEventHandler('esx_hacking:startTimer', function() 63 | local timer = Stores[store].secondsRemaining 64 | 65 | Citizen.CreateThread(function() 66 | while timer > 0 and holdingUp do 67 | Citizen.Wait(1000) 68 | 69 | if timer > 0 then 70 | timer = timer - 1 71 | end 72 | end 73 | end) 74 | 75 | Citizen.CreateThread(function() 76 | while holdingUp do 77 | Citizen.Wait(0) 78 | drawTxt(0.66, 1.44, 1.0, 1.0, 0.4, _U('robbery_timer', timer), 255, 255, 255, 255) 79 | end 80 | end) 81 | end) 82 | 83 | Citizen.CreateThread(function() 84 | for k,v in pairs(Stores) do 85 | local blip = AddBlipForCoord(v.position.x, v.position.y, v.position.z) 86 | SetBlipSprite(blip, 521) 87 | SetBlipScale(blip, 0.8) 88 | SetBlipAsShortRange(blip, true) 89 | 90 | BeginTextCommandSetBlipName("STRING") 91 | AddTextComponentString(_U('shop_robbery')) 92 | EndTextCommandSetBlipName(blip) 93 | end 94 | end) 95 | 96 | Citizen.CreateThread(function() 97 | while true do 98 | Citizen.Wait(1) 99 | local playerPos = GetEntityCoords(PlayerPedId(), true) 100 | 101 | for k,v in pairs(Stores) do 102 | local storePos = v.position 103 | local distance = Vdist(playerPos.x, playerPos.y, playerPos.z, storePos.x, storePos.y, storePos.z) 104 | 105 | if distance < Config.Marker.DrawDistance then 106 | if not holdingUp then 107 | DrawMarker(Config.Marker.Type, storePos.x, storePos.y, storePos.z - 1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Config.Marker.x, Config.Marker.y, Config.Marker.z, Config.Marker.r, Config.Marker.g, Config.Marker.b, Config.Marker.a, false, false, 2, false, false, false, false) 108 | 109 | if distance < 0.5 then 110 | ESX.ShowHelpNotification(_U('press_to_rob', v.nameOfStore)) 111 | 112 | if IsControlJustReleased(0, 38) then 113 | TriggerServerEvent('esx_hacking:robberyStarted', k) 114 | end 115 | end 116 | end 117 | end 118 | end 119 | 120 | if holdingUp then 121 | local storePos = Stores[store].position 122 | if Vdist(playerPos.x, playerPos.y, playerPos.z, storePos.x, storePos.y, storePos.z) > Config.MaxDistance then 123 | TriggerServerEvent('esx_hacking:tooFar', store) 124 | end 125 | end 126 | end 127 | end) 128 | -------------------------------------------------------------------------------- /config.lua: -------------------------------------------------------------------------------- 1 | Config = {} 2 | Config.Locale = 'fr' 3 | 4 | Config.Marker = { 5 | -- r = 194, g = 194, b = 194, a = 75, -- red color 6 | x = 1.0, y = 1.0, z = 1.5, -- tiny, cylinder formed circle 7 | DrawDistance = 15.0, Type = 1 -- default circle type, low draw distance due to indoors area 8 | } 9 | 10 | Config.PoliceNumberRequired = 0 11 | Config.TimerBeforeNewRob = 1800 -- The cooldown timer on a store after robbery was completed / canceled, in seconds 12 | 13 | Config.MaxDistance = 20 -- max distance from the robbary, going any longer away from it will to cancel the robbary 14 | Config.GiveBlackMoney = true -- give black money? If disabled it will give cash instead 15 | 16 | Stores = { 17 | -- banque central 18 | ["paleto_twentyfourseven"] = { 19 | position = { x = 242.073, y = 211.268, z = 110.283 }, 20 | reward = math.random(150000, 250000), 21 | nameOfStore = "Banque centrale. (Centre de Vinewood)", 22 | secondsRemaining = 150, -- seconds 23 | lastRobbed = 0 24 | }, 25 | -- lifeinvader 26 | ["sandyshores_twentyfoursever"] = { 27 | position = { x = -1053.15, y = -243.629, z = 44.0211 }, 28 | reward = math.random(75000, 120000), 29 | nameOfStore = "Data base de LifeInvader. (Rockford Hills)", 30 | secondsRemaining = 120, -- seconds 31 | lastRobbed = 0 32 | }, 33 | -- fbi 34 | ["littleseoul_twentyfourseven"] = { 35 | position = { x = 117.638, y = -746.521, z = 45.7516 }, 36 | reward = math.random(205000, 305000), 37 | nameOfStore = "Data base du FBI. (Pillbox Hill)", 38 | secondsRemaining = 180, -- seconds 39 | lastRobbed = 0 40 | }, 41 | -- hospital 42 | ["hospital_twentyfourseven"] = { 43 | position = { x = 231.001, y = -1369.001, z = 39.5 }, 44 | reward = math.random(200000, 275000), 45 | nameOfStore = "Data base d\'Hôpital.", 46 | secondsRemaining = 180, -- seconds 47 | lastRobbed = 0 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /fxmanifest.lua: -------------------------------------------------------------------------------- 1 | fx_version 'adamant' 2 | 3 | game 'gta5' 4 | 5 | description 'ESX Holdup' 6 | 7 | version '1.1.0' 8 | 9 | client_scripts { 10 | '@es_extended/locale.lua', 11 | 'locales/de.lua', 12 | 'locales/en.lua', 13 | 'locales/br.lua', 14 | 'locales/fi.lua', 15 | 'locales/fr.lua', 16 | 'locales/sv.lua', 17 | 'locales/pl.lua', 18 | 'config.lua', 19 | 'client/main.lua' 20 | } 21 | 22 | server_scripts { 23 | '@es_extended/locale.lua', 24 | 'locales/de.lua', 25 | 'locales/en.lua', 26 | 'locales/br.lua', 27 | 'locales/fi.lua', 28 | 'locales/fr.lua', 29 | 'locales/sv.lua', 30 | 'locales/pl.lua', 31 | 'config.lua', 32 | 'server/main.lua' 33 | } 34 | -------------------------------------------------------------------------------- /locales/br.lua: -------------------------------------------------------------------------------- 1 | Locales['br'] = { 2 | ['shop_robbery'] = 'roubo de loja', 3 | ['press_to_rob'] = 'pressione ~INPUT_CONTEXT~ para ~o~roubar~s~ ~b~%s~s~', 4 | ['robbery_timer'] = 'assalto à loja: ~r~%s~s~ segundo(s) restante(s)', 5 | ['recently_robbed'] = 'esta loja foi recentemente roubada. Aguarde ~y~%s~s~ segundo(s) até que você possa roubar novamente', 6 | ['rob_in_prog'] = '~r~roubo em andamento em ~b~%s~s~', 7 | ['started_to_rob'] = 'você começou a roubar ~y~%s~s~', 8 | ['alarm_triggered'] = 'o alarme foi acionado', 9 | ['robbery_complete'] = '~r~O assalto foi bem sucedido~s~, você ~o~roubou~s~ ~g~$%s~s~', 10 | ['robbery_complete_at'] = '~r~Assalto bem sucedido em ~y~%s~s~', 11 | ['robbery_cancelled'] = 'o assalto foi cancelado!', 12 | ['robbery_cancelled_at'] = '~r~O assalto em ~b~%s~s~ foi cancelado!', 13 | ['min_police'] = 'deve haver pelo menos ~b~%s policiais~s~ na cidade para roubar.', 14 | ['robbery_already'] = '~r~Um assalto já está em andamento.', 15 | ['no_threat'] = 'você não representa uma ameaça para o lojista', 16 | } 17 | -------------------------------------------------------------------------------- /locales/de.lua: -------------------------------------------------------------------------------- 1 | Locales['de'] = { 2 | ['shop_robbery'] = 'ladenraub', 3 | ['press_to_rob'] = 'drücke ~INPUT_CONTEXT~ ~o~zum ausrauben~s~ ~b~%s~s~', 4 | ['robbery_timer'] = 'ladenraub: ~r~%s~s~ sekunden übrig!', 5 | ['recently_robbed'] = 'dieser Laden wurde bereits ausgeraubt. Bitte warte ~y~%s~s~ sekunden!', 6 | ['rob_in_prog'] = '~r~Raub im gange bei: ~b~%s~s~', 7 | ['started_to_rob'] = 'du hast einen Raub gestartet ~y~%s~s~', 8 | ['alarm_triggered'] = 'der Alarm wurde ausgelöst', 9 | ['robbery_complete'] = '~r~Raub erfolgreich.~s~ Du ~o~hast gestohlen~s~ ~g~$%s~s~', 10 | ['robbery_complete_at'] = '~r~Raub erfolgreich bei: ~y~%s~s~', 11 | ['robbery_cancelled'] = 'der Raub wurde abgebrochen, du bekommst nichts!', 12 | ['robbery_cancelled_at'] = '~r~Raub abgebrochen bei: ~b~%s~s~', 13 | ['min_police'] = 'there must be at least ~b~%s cops~s~ in town to rob.', 14 | ['robbery_already'] = '~r~Ein Raub ist bereits im gange.', 15 | ['no_threat'] = 'you do not pose a threat to the store keeper', 16 | } 17 | -------------------------------------------------------------------------------- /locales/en.lua: -------------------------------------------------------------------------------- 1 | Locales['en'] = { 2 | ['shop_robbery'] = 'shop Robbery', 3 | ['press_to_rob'] = 'press ~INPUT_CONTEXT~ to ~o~rob~s~ ~b~%s~s~', 4 | ['robbery_timer'] = 'store robbery: ~r~%s~s~ seconds remaning', 5 | ['recently_robbed'] = 'this store was recently been robbed. Please wait ~y~%s~s~ seconds until you can rob again', 6 | ['rob_in_prog'] = '~r~robbery in progress at ~b~%s~s~', 7 | ['started_to_rob'] = 'you started to rob ~y~%s~s~', 8 | ['alarm_triggered'] = 'the alarm has been triggered', 9 | ['robbery_complete'] = '~r~The robbery has been successful~s~, you ~o~stole~s~ ~g~$%s~s~', 10 | ['robbery_complete_at'] = '~r~Robbery successful at ~y~%s~s~', 11 | ['robbery_cancelled'] = 'the robbery has been cancelled!', 12 | ['robbery_cancelled_at'] = '~r~The robbery at ~b~%s~s~ has been cancelled!', 13 | ['min_police'] = 'there must be at least ~b~%s cops~s~ in town to rob.', 14 | ['robbery_already'] = '~r~A robbery is already in progress.', 15 | ['no_threat'] = 'you do not pose a threat to the store keeper', 16 | } 17 | -------------------------------------------------------------------------------- /locales/fi.lua: -------------------------------------------------------------------------------- 1 | Locales['fi'] = { 2 | ['shop_robbery'] = 'kaupan ryöstö', 3 | ['press_to_rob'] = 'paina ~INPUT_CONTEXT~ ~o~ryöstääksesi~s~ kaupan ~b~%s~s~', 4 | ['robbery_timer'] = 'kauppa ryöstö: ~r~%s~s~ sekunttia jäljellä', 5 | ['recently_robbed'] = 'tämä kauppa ryöstettiin vasta. Odota ~y~%s~s~ sekunttia että voit ryöstää.', 6 | ['rob_in_prog'] = '~r~ryöstö menossa kohteessa ~b~%s~s~', 7 | ['started_to_rob'] = 'sinä aloitit ryöstään ~y~%s~s~', 8 | ['alarm_triggered'] = 'hälyytys laukaistu!', 9 | ['robbery_complete'] = '~r~Ryöstö onnistui~s~, sinä ~o~varastit~s~ ~g~$%s~s~', 10 | ['robbery_complete_at'] = '~r~Ryöstö ohitse kohteessa ~y~%s~s~', 11 | ['robbery_cancelled'] = 'ryöstö keskeytyi!', 12 | ['robbery_cancelled_at'] = '~r~Ryöstö kohteessa ~b~%s~s~ keskeytyi!', 13 | ['min_police'] = 'kaupungissa pitää olla vähintää ~b~%s poliisia~s~ paikalla ryöstön aloitukseen.', 14 | ['robbery_already'] = '~r~Ryöstö on jo menossa.', 15 | ['no_threat'] = 'you do not pose a threat to the store keeper', 16 | } 17 | -------------------------------------------------------------------------------- /locales/fr.lua: -------------------------------------------------------------------------------- 1 | Locales['fr'] = { 2 | ['shop_robbery'] = 'piratage', 3 | ['press_to_rob'] = 'appuyez sur ~INPUT_CONTEXT~ ~o~pour pirater~s~ ~b~%s~s~', 4 | ['robbery_timer'] = 'piratage atm: il reste ~r~%s~s~ secondes', 5 | ['recently_robbed'] = 'cet atm a déjà été piraté. Attendez ~r~%s~b~ secondes.', 6 | ['rob_in_prog'] = '~r~piratage en cours à: ~b~%s~s~', 7 | ['started_to_rob'] = 'vous avez commencé à pirater ~b~%s~s~', 8 | ['alarm_triggered'] = 'l\'alarme a été déclenchée', 9 | ['robbery_complete'] = '~r~piratage terminé~s~. Vous avez ~o~volé~s~ ~g~$%s~s~', 10 | ['robbery_complete_at'] = '~r~piratage terminé à: ~b~%s~s~', 11 | ['robbery_cancelled'] = 'le piratage va être annulé, vous ne gagnerez rien!', 12 | ['robbery_cancelled_at'] = '~r~piratage annulé à: ~b~%s~s~', 13 | ['min_police'] = 'il faut minimum ~b~%s policiers~s~ en ville pour pirater.', 14 | ['robbery_already'] = '~r~Un piratage est déjà en cours.', 15 | ['no_threat'] = 'you do not pose a threat to the store keeper', 16 | } 17 | -------------------------------------------------------------------------------- /locales/pl.lua: -------------------------------------------------------------------------------- 1 | Locales['pl'] = { 2 | ['shop_robbery'] = 'napad Na Sklep', 3 | ['press_to_rob'] = 'Wciśnij ~INPUT_CONTEXT~ aby ~o~napaść~s~ na ~b~%s~s~', 4 | ['robbery_timer'] = 'napad na sklep: ~r~%s~s~ sekund do końca', 5 | ['recently_robbed'] = 'ten sklep niedawno został obrabowany. Proszę poczekać ~y~%s~s~ sekund przed kolejnym napadem', 6 | ['rob_in_prog'] = '~r~napad w toku w ~b~%s~s~', 7 | ['started_to_rob'] = 'rozpoczałeś/aś napad ~y~%s~s~', 8 | ['alarm_triggered'] = 'alarm został włączony', 9 | ['robbery_complete'] = '~r~Napad udany~s~, ~o~obrabowałeś/aś~s~ ~g~$%s~s~', 10 | ['robbery_complete_at'] = '~r~Napad udany w ~y~%s~s~', 11 | ['robbery_cancelled'] = 'napad został anulowany!', 12 | ['robbery_cancelled_at'] = '~r~Napad w ~b~%s~s~ został anulowany!', 13 | ['min_police'] = 'minimalnie musi być ~b~%s policjantów~s~ w mieście aby obrabować.', 14 | ['robbery_already'] = '~r~Napad jest już w toku.', 15 | ['no_threat'] = 'nie tworzysz zagrożenia dla tego sklepu', 16 | } 17 | -------------------------------------------------------------------------------- /locales/sv.lua: -------------------------------------------------------------------------------- 1 | Locales['sv'] = { 2 | ['shop_robbery'] = 'butikrån', 3 | ['press_to_rob'] = 'tryck ~INPUT_CONTEXT~ för att ~o~råna~s~ ~b~%s~s~', 4 | ['robbery_timer'] = 'butiksrån: ~r~%s~s~ sekunder kvarstår', 5 | ['recently_robbed'] = 'denna butik har nyligen rånats, du måste vänta ~y~%s~s~ sekunder!', 6 | ['rob_in_prog'] = '~r~Det är ett pågående rån vid ~b~%s~s~', 7 | ['started_to_rob'] = 'du började att råna ~y~%s~s~, gå inte för långt från butiken!', 8 | ['alarm_triggered'] = '~o~Larmet har utlösts~s~', 9 | ['robbery_complete'] = '~r~Rånet är avklarat~s~, du stal ~r~%s SEK~s~!', 10 | ['robbery_complete_at'] = '~r~Ett rån lyckades~s~ vid ~y~%s~s~', 11 | ['robbery_cancelled'] = 'rånet avbröts!', 12 | ['robbery_cancelled_at'] = '~r~Rånet~s~ vid ~b~%s~s~ avbröts!', 13 | ['min_police'] = 'det måste vara minst ~b~%s poliser~s~ inne för att du ska kunna ~o~råna butiker~s~.', 14 | ['robbery_already'] = '~r~Ett rån pågår redan.', 15 | ['no_threat'] = 'du kan inte hota utan ett vapen', 16 | } -------------------------------------------------------------------------------- /server/main.lua: -------------------------------------------------------------------------------- 1 | local rob = false 2 | local robbers = {} 3 | ESX = nil 4 | 5 | TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) 6 | 7 | RegisterServerEvent('esx_hacking:tooFar') 8 | AddEventHandler('esx_hacking:tooFar', function(currentStore) 9 | local _source = source 10 | local xPlayers = ESX.GetPlayers() 11 | rob = false 12 | 13 | for i=1, #xPlayers, 1 do 14 | local xPlayer = ESX.GetPlayerFromId(xPlayers[i]) 15 | 16 | if xPlayer.job.name == 'police' then 17 | TriggerClientEvent('esx:showNotification', xPlayers[i], _U('robbery_cancelled_at', Stores[currentStore].nameOfStore)) 18 | TriggerClientEvent('esx_hacking:killBlip', xPlayers[i]) 19 | end 20 | end 21 | 22 | if robbers[_source] then 23 | TriggerClientEvent('esx_hacking:tooFar', _source) 24 | robbers[_source] = nil 25 | TriggerClientEvent('esx:showNotification', _source, _U('robbery_cancelled_at', Stores[currentStore].nameOfStore)) 26 | end 27 | end) 28 | 29 | RegisterServerEvent('esx_hacking:robberyStarted') 30 | AddEventHandler('esx_hacking:robberyStarted', function(currentStore) 31 | local _source = source 32 | local xPlayer = ESX.GetPlayerFromId(_source) 33 | local xPlayers = ESX.GetPlayers() 34 | 35 | if Stores[currentStore] then 36 | local store = Stores[currentStore] 37 | 38 | if (os.time() - store.lastRobbed) < Config.TimerBeforeNewRob and store.lastRobbed ~= 0 then 39 | TriggerClientEvent('esx:showNotification', _source, _U('recently_robbed', Config.TimerBeforeNewRob - (os.time() - store.lastRobbed))) 40 | return 41 | end 42 | 43 | local cops = 0 44 | for i=1, #xPlayers, 1 do 45 | local xPlayer = ESX.GetPlayerFromId(xPlayers[i]) 46 | if xPlayer.job.name == 'police' then 47 | cops = cops + 1 48 | end 49 | end 50 | 51 | if not rob then 52 | if cops >= Config.PoliceNumberRequired then 53 | rob = true 54 | 55 | for i=1, #xPlayers, 1 do 56 | local xPlayer = ESX.GetPlayerFromId(xPlayers[i]) 57 | if xPlayer.job.name == 'police' then 58 | TriggerClientEvent('esx:showNotification', xPlayers[i], _U('rob_in_prog', store.nameOfStore)) 59 | TriggerClientEvent('esx_hacking:setBlip', xPlayers[i], Stores[currentStore].position) 60 | end 61 | end 62 | 63 | TriggerClientEvent('esx:showNotification', _source, _U('started_to_rob', store.nameOfStore)) 64 | TriggerClientEvent('esx:showNotification', _source, _U('alarm_triggered')) 65 | 66 | TriggerClientEvent('esx_hacking:currentlyRobbing', _source, currentStore) 67 | TriggerClientEvent('esx_hacking:startTimer', _source) 68 | 69 | Stores[currentStore].lastRobbed = os.time() 70 | robbers[_source] = currentStore 71 | 72 | SetTimeout(store.secondsRemaining * 1000, function() 73 | if robbers[_source] then 74 | rob = false 75 | if xPlayer then 76 | TriggerClientEvent('esx_hacking:robberyComplete', _source, store.reward) 77 | 78 | if Config.GiveBlackMoney then 79 | xPlayer.addAccountMoney('black_money', store.reward) 80 | else 81 | xPlayer.addMoney(store.reward) 82 | end 83 | 84 | local xPlayers, xPlayer = ESX.GetPlayers(), nil 85 | for i=1, #xPlayers, 1 do 86 | xPlayer = ESX.GetPlayerFromId(xPlayers[i]) 87 | 88 | if xPlayer.job.name == 'police' then 89 | TriggerClientEvent('esx:showNotification', xPlayers[i], _U('robbery_complete_at', store.nameOfStore)) 90 | TriggerClientEvent('esx_hacking:killBlip', xPlayers[i]) 91 | end 92 | end 93 | end 94 | end 95 | end) 96 | else 97 | TriggerClientEvent('esx:showNotification', _source, _U('min_police', Config.PoliceNumberRequired)) 98 | end 99 | else 100 | TriggerClientEvent('esx:showNotification', _source, _U('robbery_already')) 101 | end 102 | end 103 | end) 104 | --------------------------------------------------------------------------------