local QBCore = nil if Config.Framework == "qbcore" then QBCore = exports['qb-core']:GetCoreObject() end -- DATA: { [citizenid] = { [drug] = { level = 10, lastDose = os.time(), label = "Joint" } } } local PlayerAddictions = {} -- Function to get player addictions function GetPlayerAddictions(source) local Player = QBCore.Functions.GetPlayer(source) if not Player then return {} end local citizenid = Player.PlayerData.citizenid if not PlayerAddictions[citizenid] then local metadata = Player.PlayerData.metadata['addictions'] or {} PlayerAddictions[citizenid] = metadata end return PlayerAddictions[citizenid] end -- Save addictions to metadata function SaveAddictions(source) local Player = QBCore.Functions.GetPlayer(source) if not Player then return end local citizenid = Player.PlayerData.citizenid if PlayerAddictions[citizenid] then Player.Functions.SetMetaData('addictions', PlayerAddictions[citizenid]) end end -- Update addiction level RegisterServerEvent('drc_drugs:server:updateAddiction', function(drug, amount, label) local src = source if not Config.Addiction.Enabled then return end local addictions = GetPlayerAddictions(src) local isNew = not addictions[drug] if isNew then addictions[drug] = { level = amount, lastDose = os.time(), label = label } TriggerClientEvent('QBCore:Notify', src, Config.Addiction.FirstTimeWarning, 'error') else addictions[drug].level = math.min(100, addictions[drug].level + amount) addictions[drug].lastDose = os.time() addictions[drug].label = label end TriggerClientEvent('drc_drugs:client:syncAddictions', src, addictions) SaveAddictions(src) end) -- Periodic decrease and withdrawal check CreateThread(function() while true do Wait(Config.Addiction.DecreaseInterval) for _, playerId in ipairs(GetPlayers()) do local src = tonumber(playerId) local addictions = GetPlayerAddictions(src) local changed = false for drug, data in pairs(addictions) do if data.level > 0 then data.level = math.max(0, data.level - 1) if data.level == 0 then addictions[drug] = nil end changed = true end end if changed then TriggerClientEvent('drc_drugs:client:syncAddictions', src, addictions) SaveAddictions(src) end end end end) -- Sync on join RegisterNetEvent('QBCore:Server:OnPlayerLoaded', function() local src = source local addictions = GetPlayerAddictions(src) TriggerClientEvent('drc_drugs:client:syncAddictions', src, addictions) end)