From 1d5c9114c0aba8f8bee61469f855edb0c849a970 Mon Sep 17 00:00:00 2001 From: Matthew <22198949+MafewTM@users.noreply.github.com> Date: Fri, 5 Jan 2024 00:08:40 -0500 Subject: [PATCH 1/3] refactor: registers --- client/main.lua | 60 ++++++++++++++++++++++++++++++++++++++++++- config/server.lua | 2 -- config/shared.lua | 1 + server/main.lua | 65 +++++++++++++++++++++++------------------------ 4 files changed, 92 insertions(+), 36 deletions(-) diff --git a/client/main.lua b/client/main.lua index 18f18c3..e31080f 100644 --- a/client/main.lua +++ b/client/main.lua @@ -39,6 +39,32 @@ local function safeAnim() TaskPlayAnim(cache.ped, 'amb@prop_human_bum_bin@idle_b', 'exit', 8.0, 8.0, -1, 50, 0, false, false, false) end +local function checkInteractStatus(register) + if sharedConfig.registers[register].robbed then + return false + end + + local leoCount = lib.callback.await('qbx_storerobbery:server:leoCount', false) + if leoCount > sharedConfig.minimumCops then + return true + end + + return false +end + +local function alertPolice() + local hours = GetClockHours() + local chance = config.policeAlertChance + + if IsWearingGloves() or hours >= 1 and hours <= 6 then + chance = config.policeNightAlertChance + end + + if math.random() <= chance then + TriggerServerEvent('police:server:policeAlert') + end +end + local function dropFingerprint() if IsWearingGloves() then return end if config.fingerprintChance > math.random(0, 100) then @@ -89,6 +115,7 @@ end) RegisterNUICallback('success', function(_, cb) startLockpick(false) openingRegisterHandler(config.openRegisterTime) + alertPolice() if lib.progressBar({ duration = config.openRegisterTime, label = Lang:t('text.emptying_the_register'), @@ -114,6 +141,7 @@ end) RegisterNUICallback('fail', function(_, cb) startLockpick(false) dropFingerprint() + alertPolice() TriggerServerEvent('qbx_storerobbery:server:registerFailed', isUsingAdvanced) cb('ok') end) @@ -156,6 +184,36 @@ RegisterNUICallback('tryCombination', function(data, cb) cb('ok') end) +local function createRegisters() + CreateThread(function() + for k, v in pairs(sharedConfig.registers) do + exports.ox_target:addBoxZone({ + coords = v.coords, + size = vec3(1.5, 1.5, 1.5), + rotation = 0.0, + debug = config.debugPoly, + options = { + { + name = k..'_register', + icon = 'cash-register', + label = 'Open Register', + canInteract = function() + return checkInteractStatus(k) + end, + serverEvent = 'qbx_storerobbery:server:checkStatus', + } + } + }) + end + end) +end + +AddEventHandler('onClientResourceStart', function(resource) + if resource ~= cache.resource then return end + createRegisters() +end) + +-- Update so that the target doesnt show also CreateThread(function() local hasShownText while true do @@ -217,4 +275,4 @@ CreateThread(function() if not nearby and hasShownText then hasShownText = false lib.hideTextUI() end Wait(time) end -end) +end) \ No newline at end of file diff --git a/config/server.lua b/config/server.lua index aa02c83..2047094 100644 --- a/config/server.lua +++ b/config/server.lua @@ -1,6 +1,4 @@ return { - minimumCops = 2, - notEnoughCopsNotify = true, callCopsTimeout = 240000, registerReward = { diff --git a/config/shared.lua b/config/shared.lua index a04b030..de23d89 100644 --- a/config/shared.lua +++ b/config/shared.lua @@ -1,4 +1,5 @@ return { + minimumCops = 0, registers = { [1] = {coords = vec3(-706.08, -915.42, 19.21), robbed = false, time = 0, safeKey = 1, camId = 1}, [2] = {coords = vec3(-706.16, -913.5, 19.21), robbed = false, time = 0, safeKey = 1, camId = 1}, diff --git a/server/main.lua b/server/main.lua index 7de3b12..0f0d271 100644 --- a/server/main.lua +++ b/server/main.lua @@ -46,48 +46,49 @@ local function alertPolice(text, source, camId) end) end -AddEventHandler('lockpicks:UseLockpick', function(playerSource, isAdvanced) - local playerCoords = GetEntityCoords(GetPlayerPed(playerSource)) - local closestRegisterIndex = getClosestRegister(playerCoords) - local leoCount = exports.qbx_core:GetDutyCountType('leo') - +RegisterNetEvent('qbx_storerobbery:server:checkStatus', function() + local coords = GetEntityCoords(GetPlayerPed(source)) + local closestRegisterIndex = getClosestRegister(coords) if not closestRegisterIndex then return end - if sharedConfig.registers[closestRegisterIndex].robbed then return end - if leoCount < config.minimumCops and config.notEnoughCopsNotify then - exports.qbx_core:Notify(playerSource, Lang:t('error.no_police', {Required = config.minimumCops}), 'error') - return + + local hasLockpick = exports.ox_inventory:Search(source, 'count', 'lockpick') > 0 + local hasAdvanced = exports.ox_inventory:Search(source, 'count', 'advancedlockpick') > 0 + + if hasLockpick then + TriggerClientEvent('qbx_storerobbery:client:initRegisterAttempt', source, hasAdvanced) + elseif hasAdvanced then + TriggerClientEvent('qbx_storerobbery:client:initRegisterAttempt', source, hasAdvanced) + else + exports.qbx_core:Notify(source, 'You don\'t have the appropriate items', 'error') end - startedRegister[playerSource] = true + startedRegister[source] = true sharedConfig.registers[closestRegisterIndex].robbed = true - - alertPolice(Lang:t('alert.register'), playerSource, sharedConfig.registers[closestRegisterIndex].camId) - TriggerClientEvent('qbx_storerobbery:client:initRegisterAttempt', playerSource, isAdvanced) end) RegisterNetEvent('qbx_storerobbery:server:registerFailed', function(isUsingAdvanced) local player = exports.qbx_core:GetPlayer(source) - local playerCoords = GetEntityCoords(GetPlayerPed(source)) - local closestRegisterIndex = getClosestRegister(playerCoords) - local deleteChance = isUsingAdvanced and math.random(0, 30) or math.random(0, 60) + local coords = GetEntityCoords(GetPlayerPed(source)) + local closestRegisterIndex = getClosestRegister(coords) + local removalChance = isUsingAdvanced and math.random(0, 30) or math.random(0, 60) startedRegister[source] = false sharedConfig.registers[closestRegisterIndex].robbed = false - if deleteChance > math.random(0, 100) then + if removalChance > math.random(0, 100) then exports.qbx_core:Notify(source, Lang:t('error.lockpick_broken'), 'error') if isUsingAdvanced then player.Functions.RemoveItem('advancedlockpick', 1) - TriggerClientEvent('inventory:client:ItemBox', source, ITEMS['advancedlockpick'], 'remove') + exports.ox_inventory:RemoveItem(source, 'advancedlockpick', 1) else player.Functions.RemoveItem('lockpick', 1) - TriggerClientEvent('inventory:client:ItemBox', source, ITEMS['lockpick'], 'remove') + exports.ox_inventory:RemoveItem(source, 'lockpick', 1) end end end) RegisterNetEvent('qbx_storerobbery:server:registerExited', function() - local playerCoords = GetEntityCoords(GetPlayerPed(source)) - local closestRegisterIndex = getClosestRegister(playerCoords) + local coords = GetEntityCoords(GetPlayerPed(source)) + local closestRegisterIndex = getClosestRegister(coords) startedRegister[source] = false sharedConfig.registers[closestRegisterIndex].robbed = false end) @@ -98,23 +99,17 @@ RegisterNetEvent('qbx_storerobbery:server:registerCanceled', function() end) RegisterNetEvent('qbx_storerobbery:server:registerOpened', function(isDone) + if not isDone then return end local player = exports.qbx_core:GetPlayer(source) - local playerCoords = GetEntityCoords(GetPlayerPed(source)) - local closestRegisterIndex = getClosestRegister(playerCoords) - local amount = exports.qbx_core:GetDutyCountType('leo') + local coords = GetEntityCoords(GetPlayerPed(source)) + local closestRegisterIndex = getClosestRegister(coords) if not closestRegisterIndex then return end - if #(playerCoords - sharedConfig.registers[closestRegisterIndex].coords) > 2 then return end + if #(coords - sharedConfig.registers[closestRegisterIndex].coords) > 2 then return end if not startedRegister[source] then return end - if amount < config.minimumCops and config.notEnoughCopsNotify then - exports.qbx_core:Notify(source, Lang:t('error.no_police', {Required = config.minimumCops}), 'error') - return - end player.Functions.AddMoney('cash', math.random(config.registerReward.min, config.registerReward.max)) - if not isDone then return end - TriggerClientEvent('qbx_storerobbery:client:updatedRobbables', -1, sharedConfig.registers, sharedConfig.safes) if config.registerReward.chanceAtSticky > math.random(0, 100) then local code = safeCodes[sharedConfig.registers[closestRegisterIndex].safeKey] @@ -128,8 +123,8 @@ RegisterNetEvent('qbx_storerobbery:server:registerOpened', function(isDone) label = Lang:t('text.safe_code') .. tostring(math.floor((code[1] % 360) / 3.60)) .. "-" .. tostring(math.floor((code[2] % 360) / 3.60)) .. "-" .. tostring(math.floor((code[3] % 360) / 3.60)) .. "-" .. tostring(math.floor((code[4] % 360) / 3.60)) .. "-" .. tostring(math.floor((code[5] % 360) / 3.60)) } end - player.Functions.AddItem('stickynote', 1, false, info) - TriggerClientEvent('inventory:client:ItemBox', source, ITEMS['stickynote'], 'add') + + exports.ox_inventory:AddItem(source, 'stickynote', 1, info) end startedRegister[source] = false @@ -201,6 +196,10 @@ AddEventHandler('playerJoining', function(source) TriggerClientEvent('qbx_storerobbery:client:updatedRobbables', source, sharedConfig.registers, sharedConfig.safes) end) +lib.callback.register('qbx_storerobbery:server:leoCount', function() + return exports.qbx_core:GetDutyCountType('leo') +end) + CreateThread(function() while true do safeCodes = {} From 5a988e38dd20f9bfe2ab9a8d6a0da20d52e94e6c Mon Sep 17 00:00:00 2001 From: Matthew <22198949+MafewTM@users.noreply.github.com> Date: Fri, 5 Jan 2024 00:15:37 -0500 Subject: [PATCH 2/3] fix: minor adjustment --- server/main.lua | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/server/main.lua b/server/main.lua index 0f0d271..732bbb7 100644 --- a/server/main.lua +++ b/server/main.lua @@ -3,7 +3,6 @@ local sharedConfig = require 'config.shared' local startedRegister = {} local startedSafe = {} local safeCodes = {} -local calledCops = {} local ITEMS = exports.ox_inventory:Items() local function getClosestRegister(coords) @@ -32,20 +31,6 @@ local function getClosestSafe(coords) return closestSafeIndex end -local function alertPolice(text, source, camId) - if calledCops[source] then return end - - local chance = lib.callback.await('qbx_storerobbery:client:getAlertChance', source) - if math.random() <= chance then - calledCops[source] = true - TriggerEvent('police:server:policeAlert', text, camId, source) - end - - SetTimeout(config.callCopsTimeout, function() - calledCops[source] = false - end) -end - RegisterNetEvent('qbx_storerobbery:server:checkStatus', function() local coords = GetEntityCoords(GetPlayerPed(source)) local closestRegisterIndex = getClosestRegister(coords) @@ -55,9 +40,9 @@ RegisterNetEvent('qbx_storerobbery:server:checkStatus', function() local hasAdvanced = exports.ox_inventory:Search(source, 'count', 'advancedlockpick') > 0 if hasLockpick then - TriggerClientEvent('qbx_storerobbery:client:initRegisterAttempt', source, hasAdvanced) + TriggerClientEvent('qbx_storerobbery:client:initRegisterAttempt', source, false) elseif hasAdvanced then - TriggerClientEvent('qbx_storerobbery:client:initRegisterAttempt', source, hasAdvanced) + TriggerClientEvent('qbx_storerobbery:client:initRegisterAttempt', source, true) else exports.qbx_core:Notify(source, 'You don\'t have the appropriate items', 'error') end @@ -77,10 +62,8 @@ RegisterNetEvent('qbx_storerobbery:server:registerFailed', function(isUsingAdvan if removalChance > math.random(0, 100) then exports.qbx_core:Notify(source, Lang:t('error.lockpick_broken'), 'error') if isUsingAdvanced then - player.Functions.RemoveItem('advancedlockpick', 1) exports.ox_inventory:RemoveItem(source, 'advancedlockpick', 1) else - player.Functions.RemoveItem('lockpick', 1) exports.ox_inventory:RemoveItem(source, 'lockpick', 1) end end From 4b3e0a113957a015fea7aa7bed00c30a77ffcc7d Mon Sep 17 00:00:00 2001 From: Matthew <22198949+MafewTM@users.noreply.github.com> Date: Fri, 5 Jan 2024 00:17:03 -0500 Subject: [PATCH 3/3] fix: linting --- server/main.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/server/main.lua b/server/main.lua index 732bbb7..8acc730 100644 --- a/server/main.lua +++ b/server/main.lua @@ -52,7 +52,6 @@ RegisterNetEvent('qbx_storerobbery:server:checkStatus', function() end) RegisterNetEvent('qbx_storerobbery:server:registerFailed', function(isUsingAdvanced) - local player = exports.qbx_core:GetPlayer(source) local coords = GetEntityCoords(GetPlayerPed(source)) local closestRegisterIndex = getClosestRegister(coords) local removalChance = isUsingAdvanced and math.random(0, 30) or math.random(0, 60) @@ -131,7 +130,6 @@ RegisterNetEvent('qbx_storerobbery:server:trySafe', function() sharedConfig.safes[closestSafeIndex].robbed = true startedSafe[source] = true - alertPolice(Lang:t('alert.safe'), source, sharedConfig.safes[closestSafeIndex].camId) TriggerClientEvent('qbx_storerobbery:client:initSafeAttempt', source, closestSafeIndex, safeCodes[closestSafeIndex]) end)