local QBCore = exports['qb-core']:GetCoreObject() local timeOut = false local cachedPoliceAmount = {} local flags = {} -- Callback QBCore.Functions.CreateCallback('thugs-jewelery:server:getCops', function(source, cb) local amount = 0 for _, v in pairs(QBCore.Functions.GetQBPlayers()) do if (v.PlayerData.job.name == 'police' or v.PlayerData.job.type == 'leo') and v.PlayerData.job.onduty then amount = amount + 1 end end cachedPoliceAmount[source] = amount cb(amount) end) QBCore.Functions.CreateCallback('thugs-jewelery:server:getVitrineState', function(_, cb) cb(Config.Locations) end) -- Functions local function getRewardBasedOnProbability(table) local random, probability = math.random(), 0 for k, v in pairs(table) do probability = probability + v.probability if random <= probability then return k end end return math.random(#table) end -- Events RegisterNetEvent('thugs-jewelery:server:setVitrineState', function(stateType, state, k) if stateType == 'isBusy' and type(state) == 'boolean' and Config.Locations[k] then Config.Locations[k][stateType] = state TriggerClientEvent('thugs-jewelery:client:setVitrineState', -1, stateType, state, k) end end) RegisterNetEvent('thugs-jewelery:server:vitrineReward', function(vitrineIndex) local src = source local Player = QBCore.Functions.GetPlayer(src) local cheating = false local plrPed = GetPlayerPed(src) local plrCoords = GetEntityCoords(plrPed) if not Config.Locations[vitrineIndex] then return end local vitrineCoords = Config.Locations[vitrineIndex].coords if Player and (cachedPoliceAmount[source] or 0) >= Config.RequiredCops then if plrPed then local dist = #(plrCoords - vitrineCoords) if dist <= 25.0 then Config.Locations[vitrineIndex]['isOpened'] = true Config.Locations[vitrineIndex]['isBusy'] = false TriggerClientEvent('thugs-jewelery:client:setVitrineState', -1, 'isOpened', true, vitrineIndex) TriggerClientEvent('thugs-jewelery:client:setVitrineState', -1, 'isBusy', false, vitrineIndex) local item = getRewardBasedOnProbability(Config.VitrineRewards) local amount = math.random(Config.VitrineRewards[item]['amount']['min'], Config.VitrineRewards[item]['amount']['max']) if Player.Functions.AddItem(Config.VitrineRewards[item]['item'], amount) then TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[Config.VitrineRewards[item]['item']], 'add') else TriggerClientEvent('QBCore:Notify', src, Lang:t('error.to_much'), 'error') end else cheating = true end end else cheating = true end if cheating then local license = Player.PlayerData.license if flags[license] then flags[license] = flags[license] + 1 else flags[license] = 1 end end end) RegisterNetEvent('thugs-jewelery:server:setTimeout', function() if not timeOut then timeOut = true TriggerEvent('qb-scoreboard:server:SetActivityBusy', 'jewellery', true) Citizen.CreateThread(function() Citizen.Wait(Config.Timeout) for k, _ in pairs(Config.Locations) do Config.Locations[k]['isOpened'] = false TriggerClientEvent('thugs-jewelery:client:setVitrineState', -1, 'isOpened', false, k) TriggerClientEvent('thugs-jewelery:client:setAlertState', -1, false) TriggerEvent('qb-scoreboard:server:SetActivityBusy', 'jewellery', false) end timeOut = false end) end end)