├── .github └── FUNDING.yml ├── README.md ├── client.lua ├── config.lua ├── fxmanifest.lua ├── server.lua └── targets.lua /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: testaross # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ostorerobbery 2 | second store robbery script 3 | 4 | -supports police count for ND_Core and ESX 5 | 6 | -support gabz stores and vanilla 7 | 8 | -item requirements 9 | 10 | -global timer 11 | 12 | -random item rewards 13 | 14 | -ox_lib,boii, or ps-ui skillchecks unique to register/safe 15 | 16 | -entirely using target system 17 | 18 | ``` 19 | Uses 20 | -ox_target 21 | -ox_Lib 22 | -ox_inventory 23 | ``` 24 | 25 | two items to add 26 | ``` 27 | ['advanced_lockpick'] = { 28 | label = 'Advanced Lockpick', 29 | weight = 7, 30 | consume = 1, 31 | client = { 32 | anim = { dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@', clip = 'machinic_loop_mechandplayer' }, 33 | disable = { move = true, car = true, combat = true }, 34 | usetime = 500, 35 | cancel = true 36 | } 37 | }, 38 | ['safecracker'] = { 39 | label = 'Safe Cracker', 40 | weight = 3, 41 | limit = 3, 42 | description = "*Hint*.... I mean it's a safe cracker!" 43 | }, 44 | ``` 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /client.lua: -------------------------------------------------------------------------------- 1 | --StoreRobbery 2 | 3 | function PerformSkillCheck() 4 | local skillcheck = false 5 | if Config.registerSkill == 'ox_lib' then 6 | skillcheck = lib.skillCheck({'easy', 'easy', {areaSize = 60, speedMultiplier = 1}, 'medium'}, {'w', 'a', 's', 'd'}) 7 | elseif Config.registerSkill == 'ps-ui' then 8 | exports['ps-ui']:Scrambler(function(success) 9 | skillcheck = success 10 | end, "numeric", 30, 0) 11 | elseif Config.registerSkill == 'boii' then 12 | exports['boii_minigames']:wire_cut({ 13 | style = 'default', 14 | timer = 60000 15 | }, function(success) 16 | skillcheck = success 17 | end) 18 | end 19 | return skillcheck 20 | end 21 | 22 | RegisterNetEvent('StoreRobbery') 23 | AddEventHandler('StoreRobbery', function() 24 | local policeCount = GlobalState.police or 0 25 | local state = GlobalState.GettingRobbed 26 | if state == false then 27 | if policeCount >= Config.policeCount then 28 | local skillcheck = PerformSkillCheck() 29 | if skillcheck then 30 | if lib.progressBar({ 31 | duration = 20000, 32 | label = 'Grabbing Cash', 33 | useWhileDead = false, 34 | canCancel = true, 35 | disable = {car = true,}, 36 | anim = {dict = 'anim@heists@ornate_bank@grab_cash', clip = 'grab'}, flag = 3}) 37 | then 38 | TriggerServerEvent("FinishRobbery") 39 | 40 | else 41 | TriggerServerEvent("FailRobbery") 42 | end 43 | else 44 | TriggerServerEvent("FailRobbery") 45 | end 46 | else 47 | lib.notify({ 48 | id = 'some_identifier', 49 | title = 'Notifcation', 50 | description = 'Not a good time to be stealing', 51 | position = 'top', 52 | duration = 5000, 53 | style = { 54 | backgroundColor = '#141517', 55 | color = '#909296' 56 | }, 57 | icon = 'ban', 58 | iconColor = '#C53030' 59 | }) 60 | end 61 | else 62 | print('slow down') 63 | end 64 | end) 65 | 66 | function PerformSkillCheckSafe() 67 | local skillchecksafe = false 68 | if Config.safeSkill == 'ox_lib' then 69 | skillchecksafe = lib.skillCheck({'easy', 'easy', {areaSize = 60, speedMultiplier = 1}, 'medium'}, {'w', 'a', 's', 'd'}) 70 | elseif Config.safeSkill == 'ps-ui' then 71 | exports['ps-ui']:Maze(function(success) 72 | if success then 73 | skillchecksafe = success 74 | end 75 | end, 20) -- Hack Time Limit 76 | elseif Config.safeSkill == 'boii' then 77 | exports['boii_minigames']:safe_crack({ 78 | style = 'default', 79 | difficulty = 5 80 | }, function(success) 81 | if success then 82 | skillchecksafe = success 83 | end 84 | end) 85 | end 86 | return skillchecksafe 87 | end 88 | 89 | RegisterNetEvent('SafeRobbery') 90 | AddEventHandler('SafeRobbery', function() 91 | local policeCount = GlobalState.police or 0 92 | if policeCount >= Config.policeCount then 93 | local result = PerformSkillCheckSafe() 94 | if result then 95 | if lib.progressBar({ 96 | duration = 20000, 97 | label = 'Robbing Safe', 98 | useWhileDead = false, 99 | canCancel = false, 100 | disable = {car = true,}, 101 | anim = {dict = 'anim@heists@ornate_bank@grab_cash', clip = 'grab'}, flag = 3}) 102 | then 103 | TriggerServerEvent("FinishSafeRobbery") 104 | end 105 | else 106 | TriggerServerEvent("FailRobbery") 107 | end 108 | else 109 | lib.notify({ 110 | id = 'lolwhat', 111 | title = 'Notifcation', 112 | description = 'Not a good time to be stealing', 113 | position = 'top', 114 | duration = 5000, 115 | style = { 116 | backgroundColor = '#141517', 117 | color = '#909296' 118 | }, 119 | icon = 'ban', 120 | iconColor = '#C53030' 121 | }) 122 | end 123 | end) 124 | 125 | 126 | 127 | -------------------------------------------------------------------------------- /config.lua: -------------------------------------------------------------------------------- 1 | Config = {} 2 | 3 | Config.framework = 'nd' -- esx,nd, or ox, this is for police count(ox is wip) 4 | 5 | Config.storeMap = 'vanilla' -- option of vanilla or gabz 6 | 7 | Config.policeCount = 2 -- minimum police needed, set to zero for no requirement 8 | 9 | Config.registerSkill = 'boii' -- options of ps-ui, ox_lib, or boii, spelled just like that 10 | Config.safeSkill = 'boii' 11 | 12 | Config.Cooldown = 5 --cooldown in minutes 13 | Config.cashPayout = math.random(200, 500) -- first variable is minimum, second it max, changeto a static number ifyou dont want random 14 | 15 | --safe rewards 16 | Config.safePayout = math.random(400, 1000) -- first variable is minimum, second it max, changeto a static number ifyou dont want random 17 | Config.rewardChance = math.random(1, 10) -- this is 1 out of 10, use to change odds 18 | Config.rewardItem = 'usb_hack' --item -------------------------------------------------------------------------------- /fxmanifest.lua: -------------------------------------------------------------------------------- 1 | fx_version 'bodacious' 2 | game 'gta5' 3 | lua54 'yes' 4 | author 'testarossas Store Robbery bitches' 5 | version '2' 6 | 7 | 8 | client_scripts { 9 | "client.lua", 10 | "targets.lua" 11 | } 12 | server_script 'server.lua' 13 | 14 | shared_scripts { 15 | "config.lua", 16 | "@ox_lib/init.lua" 17 | } 18 | -------------------------------------------------------------------------------- /server.lua: -------------------------------------------------------------------------------- 1 | GlobalState.GettingRobbed = false 2 | 3 | 4 | RegisterNetEvent('FinishRobbery') 5 | AddEventHandler('FinishRobbery', function() 6 | local cashMoney = Config.cashPayout 7 | local chance = math.random(1, 10) 8 | exports.ox_inventory:RemoveItem(source, 'advanced_lockpick', 1) 9 | exports.ox_inventory:AddItem(source, 'money', cashMoney) 10 | if chance >= 4 then 11 | exports.ox_inventory:AddItem(source, 'safecracker', 1) 12 | end 13 | TimerThread() 14 | end) 15 | 16 | RegisterNetEvent('FinishSafeRobbery') 17 | AddEventHandler('FinishSafeRobbery', function() 18 | local cashMoney = Config.safePayout 19 | local chance = math.random(1, 10) 20 | exports.ox_inventory:RemoveItem(source, 'safecracker', 1) 21 | exports.ox_inventory:AddItem(source, 'money', cashMoney) 22 | if chance >= 4 then 23 | exports.ox_inventory:AddItem(source, Config.rewardItem, 1) 24 | end 25 | TimerThread() 26 | end) 27 | 28 | 29 | RegisterNetEvent('FailRobbery') 30 | AddEventHandler('FailRobbery', function() 31 | exports.ox_inventory:RemoveItem(source, 'advanced_lockpick', 1) 32 | end) 33 | 34 | function TimerThread() 35 | print('TimerThread') 36 | GlobalState.GettingRobbed = true 37 | local magicMath = Config.Cooldown * 60000 38 | Wait(magicMath) 39 | GlobalState.GettingRobbed = false 40 | end 41 | 42 | local function getPoliceOnline() 43 | local NDCore = exports["ND_Core"] 44 | local amount = 0 45 | local policeDepartments = {"sahp", "lspd", "bcso"} 46 | local players = NDCore.getPlayers() 47 | for _, player in pairs(players) do 48 | if lib.table.contains(policeDepartments, player.job) then 49 | amount += 1 50 | end 51 | end 52 | return amount 53 | end 54 | 55 | --policecount 56 | if Config.framework == 'esx' then 57 | ESX = exports["es_extended"]:getSharedObject() 58 | local count = #ESX.GetExtendedPlayers('job', 'police') 59 | GlobalState.police = count 60 | elseif Config.framework == 'nd' then 61 | local NDCore = exports["ND_Core"] 62 | GlobalState.police = getPoliceOnline() 63 | elseif Config.framework == 'ox' then 64 | --coming soon 65 | elseif Config.framework == 'qb-core' then 66 | local QBCore = exports['qb-core']:GetCoreObject() 67 | GlobalState.police = QBCore.Functions.GetDutyCount('police') 68 | end 69 | -------------------------------------------------------------------------------- /targets.lua: -------------------------------------------------------------------------------- 1 | --cashier zones 2 | if Config.storeMap == 'vanilla' then 3 | exports.ox_target:addBoxZone({ 4 | name = "barbareno", 5 | coords = vec3(-3244.55, 1000.72, 13.0), 6 | size = vec3(0.5, 0.4, 0.7), 7 | rotation = 84.5, 8 | 9 | debug = 'show', 10 | options = { 11 | { 12 | icon = 'fa-solid fa-lock', 13 | label = "Rob Store", 14 | 15 | canInteract = function(entity, distance, coords, name) 16 | local hasPick = exports.ox_inventory:Search('count', 'advanced_lockpick') 17 | if hasPick >= 1 then 18 | return true 19 | else 20 | return false 21 | end 22 | end, 23 | 24 | onSelect = function(data) 25 | TriggerEvent('StoreRobbery') 26 | end 27 | } 28 | }, 29 | }) 30 | 31 | exports.ox_target:addBoxZone({ 32 | name = "inseneno", 33 | coords = vec3(-3041.4, 584.43, 8.0), 34 | size = vec3(0.4, 0.4, 0.7), 35 | rotation = 107.5, 36 | 37 | debug = 'show', 38 | 39 | options = { 40 | { 41 | icon = 'fa-solid fa-lock', 42 | label = "Rob Store", 43 | 44 | canInteract = function(entity, distance, coords, name) 45 | local hasPick = exports.ox_inventory:Search('count', 'advanced_lockpick') 46 | if hasPick >= 1 then 47 | return true 48 | else 49 | return false 50 | end 51 | end, 52 | 53 | onSelect = function(data) 54 | TriggerEvent('StoreRobbery') 55 | end 56 | } 57 | }, 58 | }) 59 | 60 | 61 | 62 | exports.ox_target:addBoxZone({ 63 | name = "clintonave", 64 | coords = vec3(373.69, 328.59, 103.6), 65 | size = vec3(0.4, 0.4, 0.7), 66 | rotation = 74.0, 67 | 68 | debug = 'show', 69 | options = { 70 | { 71 | icon = 'fa-solid fa-lock', 72 | label = "Rob Store", 73 | 74 | canInteract = function(entity, distance, coords, name) 75 | local hasPick = exports.ox_inventory:Search('count', 'advanced_lockpick') 76 | if hasPick >= 1 then 77 | return true 78 | else 79 | return false 80 | end 81 | end, 82 | 83 | onSelect = function(data) 84 | TriggerEvent('StoreRobbery') 85 | end 86 | } 87 | }, 88 | }) 89 | 90 | exports.ox_target:addBoxZone({ 91 | name = "westmirror", 92 | coords = vec3(1164.1, -322.92, 69.3), 93 | size = vec3(0.4, 0.4, 0.7), 94 | rotation = 102.5, 95 | 96 | debug = 'show', 97 | options = { 98 | { 99 | icon = 'fa-solid fa-lock', 100 | label = "Rob Store", 101 | 102 | canInteract = function(entity, distance, coords, name) 103 | local hasPick = exports.ox_inventory:Search('count', 'advanced_lockpick') 104 | if hasPick >= 1 then 105 | return true 106 | else 107 | return false 108 | end 109 | end, 110 | 111 | onSelect = function(data) 112 | TriggerEvent('StoreRobbery') 113 | end 114 | } 115 | }, 116 | }) 117 | 118 | exports.ox_target:addBoxZone({ 119 | name = "innocence", 120 | coords = vec3(25.05, -1344.95, 29.5), 121 | size = vec3(0.4, 0.4, 0.7), 122 | rotation = 89.5, 123 | 124 | debug = 'show', 125 | options = { 126 | { 127 | icon = 'fa-solid fa-lock', 128 | label = "Rob Store", 129 | 130 | canInteract = function(entity, distance, coords, name) 131 | local hasPick = exports.ox_inventory:Search('count', 'advanced_lockpick') 132 | if hasPick >= 1 then 133 | return true 134 | else 135 | return false 136 | end 137 | end, 138 | 139 | onSelect = function(data) 140 | TriggerEvent('StoreRobbery') 141 | end 142 | } 143 | }, 144 | }) 145 | 146 | exports.ox_target:addBoxZone({ 147 | name = "davis", 148 | coords = vec3(-47.32, -1757.61, 29.5), 149 | size = vec3(0.45, 0.4, 0.75), 150 | rotation = 48.5, 151 | 152 | debug = 'show', 153 | options = { 154 | { 155 | icon = 'fa-solid fa-lock', 156 | label = "Rob Store", 157 | 158 | canInteract = function(entity, distance, coords, name) 159 | local hasPick = exports.ox_inventory:Search('count', 'advanced_lockpick') 160 | if hasPick >= 1 then 161 | return true 162 | else 163 | return false 164 | end 165 | end, 166 | 167 | onSelect = function(data) 168 | TriggerEvent('StoreRobbery') 169 | end 170 | } 171 | }, 172 | }) 173 | exports.ox_target:addBoxZone({ 174 | name = "palomino", 175 | coords = vec3(-706.78, -913.7, 19.3), 176 | size = vec3(0.45, 0.4, 0.75), 177 | rotation = 88.5, 178 | 179 | options = { 180 | { 181 | icon = 'fa-solid fa-lock', 182 | label = "Rob Store", 183 | 184 | canInteract = function(entity, distance, coords, name) 185 | local hasPick = exports.ox_inventory:Search('count', 'advanced_lockpick') 186 | if hasPick >= 1 then 187 | return true 188 | else 189 | return false 190 | end 191 | end, 192 | 193 | onSelect = function(data) 194 | TriggerEvent('StoreRobbery') 195 | end 196 | } 197 | }, 198 | }) 199 | exports.ox_target:addBoxZone({ 200 | name = "paomino2", 201 | coords = vec3(2554.88, 381.49, 108.65), 202 | size = vec3(0.45, 0.4, 0.75), 203 | rotation = 88.5, 204 | 205 | options = { 206 | { 207 | icon = 'fa-solid fa-lock', 208 | label = "Rob Store", 209 | 210 | canInteract = function(entity, distance, coords, name) 211 | local hasPick = exports.ox_inventory:Search('count', 'advanced_lockpick') 212 | if hasPick >= 1 then 213 | return true 214 | else 215 | return false 216 | end 217 | end, 218 | 219 | onSelect = function(data) 220 | TriggerEvent('StoreRobbery') 221 | end 222 | } 223 | }, 224 | }) 225 | exports.ox_target:addBoxZone({ 226 | name = "senora", 227 | coords = vec3(2676.29, 3281.08, 55.5), 228 | size = vec3(0.45, 0.4, 0.75), 229 | rotation = 150.0, 230 | 231 | options = { 232 | { 233 | icon = 'fa-solid fa-lock', 234 | label = "Rob Store", 235 | 236 | canInteract = function(entity, distance, coords, name) 237 | local hasPick = exports.ox_inventory:Search('count', 'advanced_lockpick') 238 | if hasPick >= 1 then 239 | return true 240 | else 241 | return false 242 | end 243 | end, 244 | 245 | onSelect = function(data) 246 | TriggerEvent('StoreRobbery') 247 | end 248 | } 249 | }, 250 | }) 251 | exports.ox_target:addBoxZone({ 252 | name = "niland", 253 | coords = vec3(1959.39, 3742.33, 32.45), 254 | size = vec3(0.45, 0.4, 0.75), 255 | rotation = 120.0, 256 | 257 | options = { 258 | { 259 | icon = 'fa-solid fa-lock', 260 | label = "Rob Store", 261 | 262 | canInteract = function(entity, distance, coords, name) 263 | local hasPick = exports.ox_inventory:Search('count', 'advanced_lockpick') 264 | if hasPick >= 1 then 265 | return true 266 | else 267 | return false 268 | end 269 | end, 270 | 271 | onSelect = function(data) 272 | TriggerEvent('StoreRobbery') 273 | end 274 | } 275 | }, 276 | }) 277 | exports.ox_target:addBoxZone({ 278 | name = "route68", 279 | coords = vec3(548.79, 2668.95, 42.25), 280 | size = vec3(0.45, 0.4, 0.75), 281 | rotation = 95.0, 282 | 283 | options = { 284 | { 285 | icon = 'fa-solid fa-lock', 286 | label = "Rob Store", 287 | 288 | canInteract = function(entity, distance, coords, name) 289 | local hasPick = exports.ox_inventory:Search('count', 'advanced_lockpick') 290 | if hasPick >= 1 then 291 | return true 292 | else 293 | return false 294 | end 295 | end, 296 | 297 | onSelect = function(data) 298 | TriggerEvent('StoreRobbery') 299 | end 300 | } 301 | }, 302 | }) 303 | exports.ox_target:addBoxZone({ 304 | name = "senorafw", 305 | coords = vec3(1729.4, 6417.09, 35.0), 306 | size = vec3(0.45, 0.4, 0.75), 307 | rotation = 65.0, 308 | 309 | options = { 310 | { 311 | icon = 'fa-solid fa-lock', 312 | label = "Rob Store", 313 | 314 | canInteract = function(entity, distance, coords, name) 315 | local hasPick = exports.ox_inventory:Search('count', 'advanced_lockpick') 316 | if hasPick >= 1 then 317 | return true 318 | else 319 | return false 320 | end 321 | end, 322 | 323 | onSelect = function(data) 324 | TriggerEvent('StoreRobbery') 325 | end 326 | } 327 | }, 328 | }) 329 | 330 | -- safe zones 331 | exports.ox_target:addBoxZone({ 332 | name = "storesafe2", 333 | coords = vec3(-3048.8, 588.9, 8.3), 334 | size = vec3(0.7, 0.25, 0.8), 335 | rotation = 16.5, 336 | options = { 337 | { 338 | icon = 'fa-solid fa-lock', 339 | label = "Crack Safe", 340 | canInteract = function(entity, distance, coords, name) 341 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 342 | if hasPick >= 1 then 343 | return true 344 | else 345 | return false 346 | end 347 | end, 348 | 349 | 350 | onSelect = function(data) 351 | TriggerEvent('SafeRobbery') 352 | end 353 | } 354 | }, 355 | }) 356 | 357 | 358 | exports.ox_target:addBoxZone({ 359 | name = "insenno", 360 | coords = vec3(-3048.38, 585.45, 7.35), 361 | size = vec3(0.8, 0.6, 1), 362 | rotation = 106.5, 363 | options = { 364 | { 365 | icon = 'fa-solid fa-lock', 366 | label = "Crack Safe", 367 | canInteract = function(entity, distance, coords, name) 368 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 369 | 370 | if hasPick >= 1 then 371 | return true 372 | else 373 | return false 374 | end 375 | end, 376 | 377 | onSelect = function(data) 378 | TriggerEvent('SafeRobbery') 379 | end 380 | } 381 | }, 382 | }) 383 | exports.ox_target:addBoxZone({ 384 | name = "clinton1", 385 | coords = vec3(378.24, 333.94, 103.05), 386 | size = vec3(0.8, 0.6, 1), 387 | rotation = 166.5, 388 | options = { 389 | { 390 | icon = 'fa-solid fa-lock', 391 | label = "Crack Safe", 392 | canInteract = function(entity, distance, coords, name) 393 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 394 | 395 | if hasPick >= 1 then 396 | return true 397 | else 398 | return false 399 | end 400 | end, 401 | 402 | onSelect = function(data) 403 | TriggerEvent('SafeRobbery') 404 | end 405 | } 406 | }, 407 | }) 408 | 409 | exports.ox_target:addBoxZone({ 410 | name = "storesafe4", 411 | coords = vec3(1159.15, -314.1, 68.7), 412 | size = vec3(0.2, 0.7, 0.7), 413 | rotation = 11.75, 414 | options = { 415 | { 416 | icon = 'fa-solid fa-lock', 417 | label = "Crack Safe", 418 | canInteract = function(entity, distance, coords, name) 419 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 420 | 421 | if hasPick >= 1 then 422 | return true 423 | else 424 | return false 425 | end 426 | end, 427 | 428 | onSelect = function(data) 429 | TriggerEvent('SafeRobbery') 430 | end 431 | } 432 | }, 433 | }) 434 | 435 | exports.ox_target:addBoxZone({ 436 | name = "innoc", 437 | coords = vec3(28.15, -1338.62, 29.0), 438 | size = vec3(0.8, 0.6, 1), 439 | rotation = 180.75, 440 | options = { 441 | { 442 | icon = 'fa-solid fa-lock', 443 | label = "Crack Safe", 444 | canInteract = function(entity, distance, coords, name) 445 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 446 | 447 | if hasPick >= 1 then 448 | return true 449 | else 450 | return false 451 | end 452 | end, 453 | 454 | onSelect = function(data) 455 | TriggerEvent('SafeRobbery') 456 | end 457 | } 458 | }, 459 | }) 460 | exports.ox_target:addBoxZone({ 461 | name = "barbareno1", 462 | coords = vec3(-3250.55, 1004.42, 12.25), 463 | size = vec3(0.8, 0.6, 1), 464 | rotation = 85.5, 465 | options = { 466 | { 467 | icon = 'fa-solid fa-lock', 468 | label = "Crack Safe", 469 | canInteract = function(entity, distance, coords, name) 470 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 471 | 472 | if hasPick >= 1 then 473 | return true 474 | else 475 | return false 476 | end 477 | end, 478 | 479 | onSelect = function(data) 480 | TriggerEvent('SafeRobbery') 481 | end 482 | } 483 | }, 484 | }) 485 | exports.ox_target:addBoxZone({ 486 | name = "storesafe7", 487 | coords = vec3(-43.7, -1748.2, 28.95), 488 | size = vec3(0.25, 0.7, 0.7), 489 | rotation = 319.5, 490 | options = { 491 | { 492 | icon = 'fa-solid fa-lock', 493 | label = "Crack Safe", 494 | canInteract = function(entity, distance, coords, name) 495 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 496 | 497 | if hasPick >= 1 then 498 | return true 499 | else 500 | return false 501 | end 502 | end, 503 | 504 | onSelect = function(data) 505 | TriggerEvent('SafeRobbery') 506 | end 507 | } 508 | }, 509 | }) 510 | exports.ox_target:addBoxZone({ 511 | name = "storesafe8", 512 | coords = vec3(-710.05, -904.15, 18.75), 513 | size = vec3(0.3, 0.6, 0.7), 514 | rotation = 0.0, 515 | options = { 516 | { 517 | icon = 'fa-solid fa-lock', 518 | label = "Crack Safe", 519 | canInteract = function(entity, distance, coords, name) 520 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 521 | 522 | if hasPick >= 1 then 523 | return true 524 | else 525 | return false 526 | end 527 | end, 528 | 529 | onSelect = function(data) 530 | TriggerEvent('SafeRobbery') 531 | end 532 | } 533 | }, 534 | }) 535 | exports.ox_target:addBoxZone({ 536 | name = "palomino3", 537 | coords = vec3(2548.69, 384.87, 108.1), 538 | size = vec3(0.8, 0.6, 1), 539 | rotation = 85.5, 540 | options = { 541 | { 542 | icon = 'fa-solid fa-lock', 543 | label = "Crack Safe", 544 | canInteract = function(entity, distance, coords, name) 545 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 546 | if hasPick >= 1 then 547 | return true 548 | else 549 | return false 550 | end 551 | end, 552 | 553 | onSelect = function(data) 554 | TriggerEvent('SafeRobbery') 555 | end 556 | } 557 | }, 558 | }) 559 | exports.ox_target:addBoxZone({ 560 | name = "senora2", 561 | coords = vec3(2672.3, 3286.9, 54.7), 562 | size = vec3(0.8, 0.6, 1), 563 | rotation = 60.5, 564 | options = { 565 | { 566 | icon = 'fa-solid fa-lock', 567 | label = "Crack Safe", 568 | canInteract = function(entity, distance, coords, name) 569 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 570 | 571 | if hasPick >= 1 then 572 | return true 573 | else 574 | return false 575 | end 576 | end, 577 | 578 | onSelect = function(data) 579 | TriggerEvent('SafeRobbery') 580 | end 581 | } 582 | }, 583 | }) 584 | exports.ox_target:addBoxZone({ 585 | name = "niland1", 586 | coords = vec3(1958.98, 3749.41, 31.75), 587 | size = vec3(0.8, 0.6, 1), 588 | rotation = 30.5, 589 | options = { 590 | { 591 | icon = 'fa-solid fa-lock', 592 | label = "Crack Safe", 593 | canInteract = function(entity, distance, coords, name) 594 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 595 | 596 | if hasPick >= 1 then 597 | return true 598 | else 599 | return false 600 | end 601 | end, 602 | 603 | onSelect = function(data) 604 | TriggerEvent('SafeRobbery') 605 | end 606 | } 607 | }, 608 | }) 609 | exports.ox_target:addBoxZone({ 610 | name = "route68", 611 | coords = vec3(546.52, 2662.24, 41.7), 612 | size = vec3(0.8, 0.6, 1), 613 | rotation = 9.5, 614 | options = { 615 | { 616 | icon = 'fa-solid fa-lock', 617 | label = "Crack Safe", 618 | canInteract = function(entity, distance, coords, name) 619 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 620 | 621 | if hasPick >= 1 then 622 | return true 623 | else 624 | return false 625 | end 626 | end, 627 | 628 | onSelect = function(data) 629 | TriggerEvent('SafeRobbery') 630 | end 631 | } 632 | }, 633 | }) 634 | elseif Config.storeMap == 'gabz' then 635 | exports.ox_target:addBoxZone({ 636 | name = "storecr1", 637 | coords = vec3(-3243.75, 1001.0, 13.0), 638 | size = vec3(0.5, 0.25, 0.25), 639 | rotation = 358.0, 640 | items = 'advanced_lockpick', 641 | options = { 642 | { 643 | icon = 'fa-solid fa-lock', 644 | label = "Rob Store", 645 | 646 | onSelect = function(data) 647 | TriggerEvent('StoreRobbery') 648 | end 649 | } 650 | }, 651 | }) 652 | 653 | exports.ox_target:addBoxZone({ 654 | name = "storerc3", 655 | coords = vec3(-3040.75, 584.85, 8.05), 656 | size = vec3(0.45, 0.15, 0.15), 657 | rotation = 21.25, 658 | items = 'advanced_lockpick', 659 | options = { 660 | { 661 | icon = 'fa-solid fa-lock', 662 | label = "Rob Store", 663 | 664 | onSelect = function(data) 665 | TriggerEvent('StoreRobbery') 666 | end 667 | } 668 | }, 669 | }) 670 | 671 | 672 | 673 | exports.ox_target:addBoxZone({ 674 | name = "storecr5", 675 | coords = vec3(373.75, 327.75, 103.7), 676 | size = vec3(0.1, 0.4, 0.15), 677 | rotation = 350.5, 678 | items = 'advanced_lockpick', 679 | options = { 680 | { 681 | icon = 'fa-solid fa-lock', 682 | label = "Rob Store", 683 | 684 | onSelect = function(data) 685 | TriggerEvent('StoreRobbery') 686 | end 687 | } 688 | }, 689 | }) 690 | 691 | exports.ox_target:addBoxZone({ 692 | name = "storecr7", 693 | coords = vec3(1164.7, -324.85, 69.3), 694 | size = vec3(0.35, 0.15, 0.15), 695 | rotation = 280.25, 696 | items = 'advanced_lockpick', 697 | options = { 698 | { 699 | icon = 'fa-solid fa-lock', 700 | label = "Rob Store", 701 | 702 | onSelect = function(data) 703 | TriggerEvent('StoreRobbery') 704 | end 705 | } 706 | }, 707 | }) 708 | 709 | exports.ox_target:addBoxZone({ 710 | name = "storecr9", 711 | coords = vec3(25.3, -1345.7, 29.65), 712 | size = vec3(0.1, 0.35, 0.15), 713 | rotation = 4.25, 714 | items = 'advanced_lockpick', 715 | options = { 716 | { 717 | icon = 'fa-solid fa-lock', 718 | label = "Rob Store", 719 | 720 | onSelect = function(data) 721 | TriggerEvent('StoreRobbery') 722 | end 723 | } 724 | }, 725 | }) 726 | 727 | exports.ox_target:addBoxZone({ 728 | name = "storecr11", 729 | coords = vec3(-48.45, -1759.3, 29.5), 730 | size = vec3(0.25, 0.45, 0.15), 731 | rotation = 321.0, 732 | items = 'advanced_lockpick', 733 | options = { 734 | { 735 | icon = 'fa-solid fa-lock', 736 | label = "Rob Store", 737 | 738 | onSelect = function(data) 739 | TriggerEvent('StoreRobbery') 740 | end 741 | } 742 | }, 743 | }) 744 | exports.ox_target:addBoxZone({ 745 | name = "storecr13", 746 | coords = vec3(-706.5, -913.7, 19.25), 747 | size = vec3(0.15, 0.4, 0.2), 748 | rotation = 0.5, 749 | items = 'advanced_lockpick', 750 | options = { 751 | { 752 | icon = 'fa-solid fa-lock', 753 | label = "Rob Store", 754 | onSelect = function(data) 755 | TriggerEvent('StoreRobbery') 756 | end 757 | } 758 | }, 759 | }) 760 | exports.ox_target:addBoxZone({ 761 | name = "storecr15", 762 | coords = vec3(2557.8, 381.65, 108.8), 763 | size = vec3(0.45, 0.2, 0.2), 764 | rotation = 355.25, 765 | items = 'advanced_lockpick', 766 | options = { 767 | { 768 | icon = 'fa-solid fa-lock', 769 | label = "Rob Store", 770 | 771 | onSelect = function(data) 772 | TriggerEvent('StoreRobbery') 773 | end 774 | } 775 | }, 776 | }) 777 | exports.ox_target:addBoxZone({ 778 | name = "storecr17", 779 | coords = vec3(2678.9, 3279.9, 55.4), 780 | size = vec3(0.4, 0.2, 0.2), 781 | rotation = 327.25, 782 | items = 'advanced_lockpick', 783 | options = { 784 | { 785 | icon = 'fa-solid fa-lock', 786 | label = "Rob Store", 787 | 788 | onSelect = function(data) 789 | TriggerEvent('StoreRobbery') 790 | end 791 | } 792 | }, 793 | }) 794 | exports.ox_target:addBoxZone({ 795 | name = "storecr20", 796 | coords = vec3(1960.05, 3741.8, 32.5), 797 | size = vec3(0.35, 0.2, 0.2), 798 | rotation = 306.75, 799 | items = 'advanced_lockpick', 800 | options = { 801 | { 802 | icon = 'fa-solid fa-lock', 803 | label = "Rob Store", 804 | 805 | onSelect = function(data) 806 | TriggerEvent('StoreRobbery') 807 | end 808 | } 809 | }, 810 | }) 811 | exports.ox_target:addBoxZone({ 812 | name = "storecr21", 813 | coords = vec3(548.15, 2671.75, 42.3), 814 | size = vec3(0.15, 0.45, 0.2), 815 | rotation = 0.75, 816 | items = 'advanced_lockpick', 817 | options = { 818 | { 819 | icon = 'fa-solid fa-lock', 820 | label = "Rob Store", 821 | 822 | onSelect = function(data) 823 | TriggerEvent('StoreRobbery') 824 | end 825 | } 826 | }, 827 | }) 828 | exports.ox_target:addBoxZone({ 829 | name = "storecr23", 830 | coords = vec3(1729.35, 6416.3, 35.2), 831 | size = vec3(0.3, 0.35, 0.2), 832 | rotation = 338.5, 833 | items = 'advanced_lockpick', 834 | options = { 835 | { 836 | icon = 'fa-solid fa-lock', 837 | label = "Rob Store", 838 | 839 | onSelect = function(data) 840 | TriggerEvent('StoreRobbery') 841 | end 842 | } 843 | }, 844 | }) 845 | 846 | -- safe zones 847 | exports.ox_target:addBoxZone({ 848 | name = "storesafe2", 849 | coords = vec3(-3048.8, 588.9, 8.3), 850 | size = vec3(0.7, 0.25, 0.8), 851 | rotation = 16.5, 852 | options = { 853 | { 854 | icon = 'fa-solid fa-lock', 855 | label = "Crack Safe", 856 | canInteract = function(entity, distance, coords, name) 857 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 858 | print(haspick) 859 | if hasPick >= 1 then 860 | return true 861 | else 862 | return false 863 | end 864 | end, 865 | 866 | 867 | onSelect = function(data) 868 | TriggerEvent('SafeRobbery') 869 | end 870 | } 871 | }, 872 | }) 873 | 874 | 875 | exports.ox_target:addBoxZone({ 876 | name = "storesafe1", 877 | coords = vec3(-3249.65, 1007.75, 13.25), 878 | size = vec3(0.7, 0.25, 0.75), 879 | rotation = 355.25, 880 | options = { 881 | { 882 | icon = 'fa-solid fa-lock', 883 | label = "Crack Safe", 884 | canInteract = function(entity, distance, coords, name) 885 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 886 | 887 | if hasPick >= 1 then 888 | return true 889 | else 890 | return false 891 | end 892 | end, 893 | 894 | onSelect = function(data) 895 | TriggerEvent('SafeRobbery') 896 | end 897 | } 898 | }, 899 | }) 900 | exports.ox_target:addBoxZone({ 901 | name = "storesafe3", 902 | coords = vec3(381.5, 332.5, 104.0), 903 | size = vec3(0.35, 0.7, 0.8), 904 | rotation = 345.5, 905 | options = { 906 | { 907 | icon = 'fa-solid fa-lock', 908 | label = "Crack Safe", 909 | canInteract = function(entity, distance, coords, name) 910 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 911 | 912 | if hasPick >= 1 then 913 | return true 914 | else 915 | return false 916 | end 917 | end, 918 | 919 | onSelect = function(data) 920 | TriggerEvent('SafeRobbery') 921 | end 922 | } 923 | }, 924 | }) 925 | 926 | exports.ox_target:addBoxZone({ 927 | name = "storesafe4", 928 | coords = vec3(1159.15, -314.1, 68.7), 929 | size = vec3(0.2, 0.7, 0.7), 930 | rotation = 11.75, 931 | options = { 932 | { 933 | icon = 'fa-solid fa-lock', 934 | label = "Crack Safe", 935 | canInteract = function(entity, distance, coords, name) 936 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 937 | 938 | if hasPick >= 1 then 939 | return true 940 | else 941 | return false 942 | end 943 | end, 944 | 945 | onSelect = function(data) 946 | TriggerEvent('SafeRobbery') 947 | end 948 | } 949 | }, 950 | }) 951 | 952 | exports.ox_target:addBoxZone({ 953 | name = "storesafe5", 954 | coords = vec3(31.55, -1339.3, 29.9), 955 | size = vec3(1.05, 0.7, 0.8), 956 | rotation = 0.0, 957 | options = { 958 | { 959 | icon = 'fa-solid fa-lock', 960 | label = "Crack Safe", 961 | canInteract = function(entity, distance, coords, name) 962 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 963 | 964 | if hasPick >= 1 then 965 | return true 966 | else 967 | return false 968 | end 969 | end, 970 | 971 | onSelect = function(data) 972 | TriggerEvent('SafeRobbery') 973 | end 974 | } 975 | }, 976 | }) 977 | exports.ox_target:addBoxZone({ 978 | name = "storesafe6", 979 | coords = vec3(-3249.65, 1007.65, 13.25), 980 | size = vec3(0.7, 0.05, 0.75), 981 | rotation = 355.0, 982 | options = { 983 | { 984 | icon = 'fa-solid fa-lock', 985 | label = "Crack Safe", 986 | canInteract = function(entity, distance, coords, name) 987 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 988 | 989 | if hasPick >= 1 then 990 | return true 991 | else 992 | return false 993 | end 994 | end, 995 | 996 | onSelect = function(data) 997 | TriggerEvent('SafeRobbery') 998 | end 999 | } 1000 | }, 1001 | }) 1002 | exports.ox_target:addBoxZone({ 1003 | name = "storesafe7", 1004 | coords = vec3(-43.7, -1748.2, 28.95), 1005 | size = vec3(0.25, 0.7, 0.7), 1006 | rotation = 319.5, 1007 | options = { 1008 | { 1009 | icon = 'fa-solid fa-lock', 1010 | label = "Crack Safe", 1011 | canInteract = function(entity, distance, coords, name) 1012 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 1013 | 1014 | if hasPick >= 1 then 1015 | return true 1016 | else 1017 | return false 1018 | end 1019 | end, 1020 | 1021 | onSelect = function(data) 1022 | TriggerEvent('SafeRobbery') 1023 | end 1024 | } 1025 | }, 1026 | }) 1027 | exports.ox_target:addBoxZone({ 1028 | name = "storesafe8", 1029 | coords = vec3(-710.05, -904.15, 18.75), 1030 | size = vec3(0.3, 0.6, 0.7), 1031 | rotation = 0.0, 1032 | options = { 1033 | { 1034 | icon = 'fa-solid fa-lock', 1035 | label = "Crack Safe", 1036 | canInteract = function(entity, distance, coords, name) 1037 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 1038 | 1039 | if hasPick >= 1 then 1040 | return true 1041 | else 1042 | return false 1043 | end 1044 | end, 1045 | 1046 | onSelect = function(data) 1047 | TriggerEvent('SafeRobbery') 1048 | end 1049 | } 1050 | }, 1051 | }) 1052 | exports.ox_target:addBoxZone({ 1053 | name = "storesafe9", 1054 | coords = vec3(2549.5, 388.3, 109.0), 1055 | size = vec3(0.65, 0.3, 0.75), 1056 | rotation = 358.0, 1057 | options = { 1058 | { 1059 | icon = 'fa-solid fa-lock', 1060 | label = "Crack Safe", 1061 | canInteract = function(entity, distance, coords, name) 1062 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 1063 | if hasPick >= 1 then 1064 | return true 1065 | else 1066 | return false 1067 | end 1068 | end, 1069 | 1070 | onSelect = function(data) 1071 | TriggerEvent('SafeRobbery') 1072 | end 1073 | } 1074 | }, 1075 | }) 1076 | exports.ox_target:addBoxZone({ 1077 | name = "storesafe10", 1078 | coords = vec3(2674.5, 3289.5, 55.65), 1079 | size = vec3(0.75, 0.35, 0.7), 1080 | rotation = 331.5, 1081 | options = { 1082 | { 1083 | icon = 'fa-solid fa-lock', 1084 | label = "Crack Safe", 1085 | canInteract = function(entity, distance, coords, name) 1086 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 1087 | 1088 | if hasPick >= 1 then 1089 | return true 1090 | else 1091 | return false 1092 | end 1093 | end, 1094 | 1095 | onSelect = function(data) 1096 | TriggerEvent('SafeRobbery') 1097 | end 1098 | } 1099 | }, 1100 | }) 1101 | exports.ox_target:addBoxZone({ 1102 | name = "storesafe11", 1103 | coords = vec3(1962.25, 3750.5, 32.75), 1104 | size = vec3(0.2, 0.6, 0.7), 1105 | rotation = 31.25, 1106 | options = { 1107 | { 1108 | icon = 'fa-solid fa-lock', 1109 | label = "Crack Safe", 1110 | canInteract = function(entity, distance, coords, name) 1111 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 1112 | 1113 | if hasPick >= 1 then 1114 | return true 1115 | else 1116 | return false 1117 | end 1118 | end, 1119 | 1120 | onSelect = function(data) 1121 | TriggerEvent('SafeRobbery') 1122 | end 1123 | } 1124 | }, 1125 | }) 1126 | exports.ox_target:addBoxZone({ 1127 | name = "storesafe12", 1128 | coords = vec3(543.05, 2662.45, 42.55), 1129 | size = vec3(0.25, 0.65, 0.8), 1130 | rotation = 8.0, 1131 | options = { 1132 | { 1133 | icon = 'fa-solid fa-lock', 1134 | label = "Crack Safe", 1135 | canInteract = function(entity, distance, coords, name) 1136 | local hasPick = exports.ox_inventory:Search('count', 'safecracker') 1137 | 1138 | if hasPick >= 1 then 1139 | return true 1140 | else 1141 | return false 1142 | end 1143 | end, 1144 | 1145 | onSelect = function(data) 1146 | TriggerEvent('SafeRobbery') 1147 | end 1148 | } 1149 | }, 1150 | }) 1151 | end --------------------------------------------------------------------------------